25

我的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
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

我知道它为时已晚,但我希望它会起作用新来者试试这个它的工作......:D

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 回答