为什么在使用 ISNUMERIC() 时转换失败?

时间:2021-07-19 03:43:42

标签: sql sql-server tsql casting

SELECT CAST([Revenue Size (M)] AS float)
FROM Raw_Data A
WHERE ISNUMERIC([Revenue Size (M)]) = 1

我收到一个错误:

<块引用>

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

收入规模 (M) 样本: 7371 ,7372 ,4899 ,59.5 ,1.4 ,2 ,3400

2 个答案:

答案 0 :(得分:5)

有多个示例 isnumeric() 返回 1 但该值无法转换为浮点数。四个例子是:

  • '.'
  • '-'
  • '-.'
  • '$1'

您可以在 this SQL Fiddle 中看到这一点。

更好的做法是使用try_cast()

SELECT TRY_CAST([Revenue Size (M)] AS float)
FROM Raw_Data A
WHERE TRY_CAST([Revenue Size (M)] AS float) IS NOT NULL;

答案 1 :(得分:1)

戈登是正确的 +1

但是,我倾向于在合理的情况下使用 MONEY ......它似乎更宽容一些。

示例

Select AsMoney = try_convert(money,'$5,125')
      ,AsFloat = try_convert(float,'$5,125')
      ,AsInt   = try_convert(int,'$5,125')
      ,AsDec   = try_convert(decimal(10,2),'$5,125')

结果

AsMoney     AsFloat     AsInt       AsDec
5125.00     NULL        NULL        NULL