我的一张表中有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
答案 0 :(得分:18)
CONVERT
获取列名,而不是包含列名的字符串;您当前的表达式尝试将字符串A.my_NvarcharColumn
转换为整数而不是列内容。
SELECT convert (int, N'A.my_NvarcharColumn') FROM A;
应该是
SELECT convert (int, A.my_NvarcharColumn) FROM A;
简单的SQLfiddle here。
答案 1 :(得分:5)
您始终可以使用ISNUMERIC
辅助函数仅转换真正数字的内容:
SELECT
CAST(A.my_NvarcharColumn AS BIGINT)
FROM
A
WHERE
ISNUMERIC(A.my_NvarcharColumn) = 1
答案 2 :(得分:1)
我知道它太晚但我希望它能为新来的人工作 试试这个工作......:D
select
case
when isnumeric(my_NvarcharColumn) = 1 then
cast(my_NvarcharColumn AS int)
else
NULL
end
AS 'my_NvarcharColumnmitter'
from A
答案 3 :(得分: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
答案 4 :(得分:0)
如果你想从char转换为int,为什么不考虑 unicode 号?
SELECT UNICODE(';') -- 59
这样您可以将任何char转换为int而不会出现任何错误。欢呼声。