SQL无法将Varchar转换为数值-转换失败错误

时间:2019-02-11 12:02:21

标签: sql casting numeric varchar

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

  

第245级状态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时,转换失败。

1 个答案:

答案 0 :(得分:0)

(CASE WHEN ISNUMERIC(SerialNumber) = 1 THEN CONVERT(NUMERIC(16, 0), SerialNumber) ELSE 0 END) 返回一个整数,这是您的问题。您正在执行许多不必要的中间转换。只要做:

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

或更妙的是:

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

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

function show (classname) {
  // targeting your button
  const button = document.getElementById('button')
  // find all possible texts inside of it
  const spans = button.getElementsByTagName('span')
  // hide all of them
  Array.prototype.slice.call(spans).forEach(span => span.classList.remove("visible"))
  // select one to be shown
  const next = button.getElementsByClassName(classname)[0]
  // show it
  next.classList.add('visible')
}