テーブルの1つにnvarchar
列があります。次に、その列の値をINT
型に変換する必要があります。
私は使用してみました
cast(A.my_NvarcharColumn as INT)
そして
convert (int, N'A.my_NvarcharColumn')
クエリを実行すると、次のようなエラーが表示されます
nvarchar値 '23454542'をデータ型intに変換するときに変換に失敗しました
こんにちは、コードスニペット全体を投稿しています
SELECT A.objID, name, des, right(Replace(Ltrim(Replace(substring(my_nvarcharcolumn,1,9), '0', ' ')), ' ', '0'),10) AS new_nvarcharcolumn
INTO #tmp1
FROM [database].[dbo].[tblname] AS A
INNER JOIN (SELECT * FROM [database].[dbo].tblname1 WHERE sourceID = 32) AS AI ON source = A.objID
INNER JOIN [database].[dbo].tblname2 AS I ON I.ObjectID = A.Source
SELECT MAX(m_dAddDate) AS date_Asof, dnum INTO #tmp2 FROM
(SELECT * FROM [database].[dbo].tblname WHERE senior <> '' AND class = 'SSS') AS A
GROUP BY dnum
SELECT DISTINCT A.* INTO #tmp3 FROM #tmp1 AS A
INNER JOIN #tmp2 AS SD ON SD.dnum =cast(A.new_nvarcharcolumn as INT)
INNER JOIN database.[dbo].tbl4 AS M ON M.dnum = cast(A.new_nvarcharcolumn as INT) AND SD.date_Asof = M.adddate
CONVERT
は、列名を含む文字列ではなく、列名を取ります。現在の式は、文字列A.my_NvarcharColumn
を列の内容ではなく整数に変換しようとします。
SELECT convert (int, N'A.my_NvarcharColumn') FROM A;
代わりにあるべきです
SELECT convert (int, A.my_NvarcharColumn) FROM A;
シンプルなSQLfiddle here 。
ISNUMERIC
ヘルパー関数を常に使用して、実際に数値のみを変換できます。
SELECT
CAST(A.my_NvarcharColumn AS BIGINT)
FROM
A
WHERE
ISNUMERIC(A.my_NvarcharColumn) = 1
私はそれが遅すぎることを知っていますが、新しい人がうまくいくことを願っていますこれを試してみてください...:D
select
case
when isnumeric(my_NvarcharColumn) = 1 then
cast(my_NvarcharColumn AS int)
else
NULL
end
AS 'my_NvarcharColumnmitter'
from A
Charからintに変換する場合は、nicode numberについて考えてみてください。
SELECT UNICODE(';') -- 59
この方法で、エラーなしでcharをintに変換できます。乾杯。
CAST()は正しいようです。
CONVERT()が正しくありません。列を文字列として引用しています。次のようなものが欲しいでしょう
CONVERT(INT, A.my_NvarcharColumn)
**引用符なしの通知**
これが失敗する可能性のある他の唯一の理由は、フィールド値に数値以外の文字がある場合、または範囲外である場合です。
次のようなものを試して数値であることを確認し、数値でない場合はNULLを返します。
SELECT
CASE
WHEN ISNUMERIC(A.my_NvarcharColumn) = 1 THEN CONVERT(INT, A.my_NvarcharColumn)
ELSE NULL
END AS my_NvarcharColumn