【问题标题】:SQL Unable to Convert Varchar to Numeric - Conversion failed errorSQL 无法将 Varchar 转换为数值 - 转换失败错误
【发布时间】:2019-07-04 22:13:12
【问题描述】:

我需要将数据库表中的序列号转换为数字或整数。我试图转换它们,但它似乎不喜欢以下某些值:1.02253e+007。收到错误说明:

消息 245,第 16 级,状态 1,第 2 行

将 varchar 值 '1.02253e+007' 转换为 数据类型 int。

有什么我遗漏的吗?非常感谢任何帮助

SELECT  [ID]
  ,[SalesOrder]
  ,[JobNumber]
  ,[StockCode]
  ,SerialNumber
  ,CONVERT(NUMERIC(16, 0), CAST(CASE 
                                  WHEN ISNUMERIC(SerialNumber) = 1 THEN 
                                  SerialNumber 
                                  ELSE 0 
                                END AS FLOAT))

接收错误: 消息 245,第 16 级,状态 1,第 2 行 将 varchar 值 '1.02253e+007' 转换为数据类型 int 时转换失败。

【问题讨论】:

    标签: sql casting numeric varchar


    【解决方案1】:

    case 正在返回一个整数,这是您的问题。您正在进行大量不必要的中间转换。做吧:

    (CASE WHEN ISNUMERIC(SerialNumber) = 1
          THEN CONVERT(NUMERIC(16, 0), SerialNumber)
          ELSE 0 
     END)
    

    或者更好:

    COALESCE(TRY_CONVERT(NUMERIC(16, 0), SerialNumber), 0)
    

    如果需要支持指数值(比如1.02253e+007),那么确实需要中间转换为float:

    TRY_CONVERT(NUMERIC(16, 0), 
                COALESCE(TRY_CONVERT(float, SerialNumber), 0)
               )
    

    【讨论】:

    • 您好,感谢您的回复,收到错误消息 8114,级别 16,状态 5,第 2 行尝试提供的代码后将数据类型 varchar 转换为数字时出错
    • @Acc 。 . .错误来自代码的不同部分。如果您使用的是TRY_CONVERT(),则不会出现该错误。
    • 对于 try_convert,我不断收到“NUMERIC”不是可识别的内置函数名称。
    • @ACC 。 . . numeric 未被用作函数。您可以改用decimal;它们是等价的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多