如何确定在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
我想要将VALUE字段转换为十进制,当然可以转换字段。
-
什么样的SQL语句可以做到这一点?
-
如何才能了解转换时发生错误的值?
PS:我认为这可以解决WHERE VALUE LIKE '[az]'
但是如何添加更多的filter如[ – +()]?
平原ISNUMERIC是垃圾
- 空string,
+
,-
和。 都是有效的
- 所以是
+.
等等 -
1e-3
是有效的浮动,但不是十进制(除非你CAST浮动,然后到十进制)
对于一个特别神秘而又安全的解决scheme,附加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