如何将 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 奇数,CONVERTVARBINARY 不应显示更少的记录,这应仅受 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 转换为 INT

特定列 -- 将数据类型 nvarchar 转换为 bigint 时出错

在 SQL CE 4.0 中将 nvarchar(50) 列转换为日期时间

SQL Server 算术溢出错误 - 将 nvarchar 转换为 datetime

将数据类型 nvarchar 转换为数值时出错

SQL 异常:将 nvarchar 值“[anyvalue]”转换为数据类型 int 时转换失败