【问题标题】:How to convert Nvarchar column to INT如何将 Nvarchar 列转换为 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-server sqldatatypes type-conversion


【解决方案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 而不会出现任何错误。干杯。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-16
          • 2011-01-09
          相关资源
          最近更新 更多