sql-server – 如何确定SQL Server中无法转换为(decimal,float,int)的字段值

前端之家收集整理的这篇文章主要介绍了sql-server – 如何确定SQL Server中无法转换为(decimal,float,int)的字段值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个sql Server数据库.

一个字段有值

ID      VALUE
  1      NEGATIF
  2      11.4
  3      0.2
  4      A RH(+)
  5      -----
  6      >>>>>
  7      5.6<
  8      -13.9

我要将CONVERT VALUE字段转换为十进制,当然可以转换字段.

>什么样的sql语句可以做到这一点?
>如何理解在转换时哪个值会引起错误

PS:我认为这可以解决像'[a-z]’,但是如何添加像[ – ()]更多的过滤器?

解决方法

平原ISNUMERIC是垃圾

>空字符串,– 和.都是有效的
>那就是等等
> 1e-3对于float而不是十进制有效(除非你将CAST漂浮到十进制)

对于一个特别隐蔽但是故障的解决方案,请附加e0或.0e0,然后使用ISNUMERIC

SELECT
   ISNUMERIC(MyCOl + 'e0')   --decimal check,ISNUMERIC(MyCOl + '.0e0')  --integer check

所以

SELECT
    ID,VALUE,CAST(
          CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
          AS decimal(38,10)
        ) AS ConvertedVALUE
FROM
    Mytable

猜你在找的MsSQL相关文章