【问题标题】:Convert a string to int using sql query使用 sql 查询将字符串转换为 int
【发布时间】:2010-10-18 05:57:36
【问题描述】:

如何在 SQL Server 2005 上使用 SQL 查询将字符串转换为整数?

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    你可以使用CAST or CONVERT:

    SELECT CAST(MyVarcharCol AS INT) FROM Table
    
    SELECT CONVERT(INT, MyVarcharCol) FROM Table
    

    【讨论】:

    • 当其中一个字段为非数字时,如何捕获/防止异常?我原以为它会转换为 0。
    • 找到它:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
    • 一句话:IsNumeric() 会产生一些反常的结果。它将为字符串“-.”返回 TRUE,当您尝试将其转换为数字时仍会导致错误。
    • IsNumeric 对带有“-”的字符串为真,仅当字符串为数字时,例如“-5”或“-20”,对于“5-”、“-”等字符串为假2-1"。所以如果 isNumeric() 为真,那么转换不应该抛出任何异常
    【解决方案2】:

    还要注意,从数字字符串(即'56.72')转换为INT 时,您可能会遇到SQL 错误。

    Conversion failed when converting the varchar value '56.72' to data type int.
    

    要解决这个问题,只需执行以下两次转换:

    字符串 -> 数字 -> 整数

    SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)
    

    将数据从 TableA 复制到 TableB 时,转换是隐式的,因此您不需要第二次转换(如果您愿意向下舍入到最接近的 INT):

    INSERT INTO TableB (MyIntCol)
    SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
    FROM TableA
    

    【讨论】:

      【解决方案3】:

      从 SQL Server 2012 开始,您可以使用 TRY_PARSETRY_CONVERT

      SELECT TRY_PARSE(MyVarcharCol as int)
      
      SELECT TRY_CONVERT(int, MyVarcharCol)
      

      【讨论】:

      • 绝对不是原始问题的正确答案,因为它与 SQL Server 2005 相关,但由于它是 2019 年并且更少的人被束缚在如此旧版本的 SQL Server 上,这个答案绝对是有帮助。
      【解决方案4】:

      试试这个,它在雅典娜对我有用:

      cast(MyVarcharCol as integer)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多