2012-10-19 31 views
10

私はnvarcharの列を自分のテーブルの1つに持っています。今、私は私がNvarchar列をINTに変換する方法

のようなエラーが発生します、私のクエリを実行したとき、私は

cast(A.my_NvarcharColumn as INT) 

convert (int, N'A.my_NvarcharColumn') 

を使用してみましたが

.. INT型にその列の値を変換する必要があります

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 
+0

キャストは私のために完全に正常に動作し、あなたが完全なコードスニペットを投稿することができ、エラーの可能性がありますので、何か他のもの – Seasoned

+0

ハイテクmarc_sであり、ハズレのが動作しない、それが – user1348424

+0

キャストをBIGINTするデータ型はnvarcharを変換エラーが細かい – Habib

答えて

12

CONVERT列名ではなく、列名を含む文字列を取ります。現在の式では、文字列A.my_NvarcharColumnを列の内容ではなく整数に変換しようとします。

SELECT convert (int, N'A.my_NvarcharColumn') FROM A; 

ではなく

SELECT convert (int, A.my_NvarcharColumn) FROM A; 

シンプルSQLfiddle hereでなければなりません。

+0

+1 SQLfiddle;私はまだそのサイトを知らなかった。 – rekire

+0

こんにちは、私はまだ同じ問題に直面している変換機能を変更しようとしました – user1348424

+0

@ user1348424あなたはあなたのnvarcharの列にいくつかの目に見えない文字があると思います。あなたは 'SELECT CONVERT(VARBINARY、A.my_NvarcharColumn)FROM A;'を試して、変換しないあなたの値のために結果を投稿できますか? –

5

あなたはいつも本当に数値だものだけを変換するにはISNUMERICヘルパー関数を使用することができます。

SELECT 
    CAST(A.my_NvarcharColumn AS BIGINT) 
FROM 
    A 
WHERE 
    ISNUMERIC(A.my_NvarcharColumn) = 1 
0

あなた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 
1

を.. 。:あなたはintに文字から変換したい場合はD

select 
    case 
     when isnumeric(my_NvarcharColumn) = 1 then 
       cast(my_NvarcharColumn AS int) 
     else 
       NULL 
end 

AS 'my_NvarcharColumnmitter' 
from A 
0

、理由についてユニコード数を考えていませんか?

SELECT UNICODE(';') -- 59 

このようにして、任意の文字をint型にエラーなしに変換できます。乾杯。

関連する問題