如何将Nvarchar列转换为INT

use*_*424 16 sql-server type-conversion sqldatatypes

我的一张nvarchar桌子上有一栏.现在我需要将该列值转换为INT类型..

我试过用

cast(A.my_NvarcharColumn as INT) 
Run Code Online (Sandbox Code Playgroud)

convert (int, N'A.my_NvarcharColumn')
Run Code Online (Sandbox Code Playgroud)

当我运行我的查询时,我收到的错误就像

将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
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 20

CONVERT获取列名,而不是包含列名的字符串; 您当前的表达式尝试将字符串转换为A.my_NvarcharColumn整数而不是列内容.

SELECT convert (int, N'A.my_NvarcharColumn') FROM A;
Run Code Online (Sandbox Code Playgroud)

应该是

SELECT convert (int, A.my_NvarcharColumn) FROM A;
Run Code Online (Sandbox Code Playgroud)

简单的SQLfiddle 在这里.


mar*_*c_s 5

您始终可以使用ISNUMERIC辅助函数来仅转换真正数字的函数:

SELECT
     CAST(A.my_NvarcharColumn AS BIGINT)
FROM 
     A
WHERE
     ISNUMERIC(A.my_NvarcharColumn) = 1
Run Code Online (Sandbox Code Playgroud)