如何将 Nvarchar 列转换为 INT
Posted
技术标签:
【中文标题】如何将 Nvarchar 列转换为 INT【英文标题】:How to convert Nvarchar column to INT 【发布时间】:2012-10-09 16:33:27 【问题描述】:我的一张表中有一个nvarchar
列。现在我需要将该列值转换为INT
类型..
我尝试过使用
cast(A.my_NvarcharColumn as INT)
和
convert (int, N'A.my_NvarcharColumn')
当我运行我的查询时,我收到了类似
的错误将 nvarchar 值“23454542”转换为 数据类型 int。
嗨,我正在发布我的整个代码 sn-p
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
【问题讨论】:
Cast 对我来说效果很好,你能发布完整的代码 sn-p,可能是因为其他原因导致的错误 嗨,marc_s,不,它不工作,它说错误将数据类型 nvarchar 转换为 bigint Sql query to convert nvarchar to int的可能重复 【参考方案1】:CONVERT
接受列名,而不是包含列名的字符串;您当前的表达式尝试将字符串 A.my_NvarcharColumn
转换为整数而不是列内容。
SELECT convert (int, N'A.my_NvarcharColumn') FROM A;
应该是
SELECT convert (int, A.my_NvarcharColumn) FROM A;
简单的 SQLfiddle here.
【讨论】:
嗨,我尝试更改转换功能仍然面临同样的问题 @user1348424 然后我怀疑你的 nvarchar 列中有一些不可见的字符。您能否尝试SELECT CONVERT(VARBINARY, A.my_NvarcharColumn) FROM A;
并发布您的一个无法转换的值的结果?
@user1348424 奇数,CONVERT
到 VARBINARY
不应显示更少的记录,这应仅受 WHERE
子句的限制。没有错误或警告消息?【参考方案2】:
您始终可以使用 ISNUMERIC
辅助函数仅转换真正的数字:
SELECT
CAST(A.my_NvarcharColumn AS BIGINT)
FROM
A
WHERE
ISNUMERIC(A.my_NvarcharColumn) = 1
【讨论】:
【参考方案3】:您的 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】:我知道为时已晚,但我希望它对新人有用 试试这个它的工作......:D
select
case
when isnumeric(my_NvarcharColumn) = 1 then
cast(my_NvarcharColumn AS int)
else
NULL
end
AS 'my_NvarcharColumnmitter'
from A
【讨论】:
【参考方案5】:如果您想从 char 转换为 int,为什么不考虑 unicode 数字?
SELECT UNICODE(';') -- 59
这样您就可以将任何 char 转换为 int 而不会出现任何错误。干杯。
【讨论】:
以上是关于如何将 Nvarchar 列转换为 INT的主要内容,如果未能解决你的问题,请参考以下文章
特定列 -- 将数据类型 nvarchar 转换为 bigint 时出错
在 SQL CE 4.0 中将 nvarchar(50) 列转换为日期时间