25

nvarcharテーブルの1つに列があります。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
4

5 に答える 5

27

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

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

代わりに

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

ここに単純なSQLfiddleがあります。

于 2012-10-19T05:27:05.873 に答える
10

ヘルパー関数をいつでも使用して、ISNUMERIC実際に数値であるものだけを変換できます。

SELECT
     CAST(A.my_NvarcharColumn AS BIGINT)
FROM 
     A
WHERE
     ISNUMERIC(A.my_NvarcharColumn) = 1
于 2012-10-19T05:27:39.723 に答える
2

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
于 2012-10-19T05:30:45.660 に答える
1

私はそれが遅すぎることを知っていますが、私はそれがうまくいくことを願っています

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

AS 'my_NvarcharColumnmitter'
from A
于 2014-03-07T15:54:57.397 に答える
0

char から int に変換したい場合は、Unicode番号について考えてみませんか?

SELECT UNICODE(';') -- 59

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

于 2017-03-14T23:38:18.710 に答える