如何确定在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字段转换为十进制,当然可以转换字段。

  1. 什么样的SQL语句可以做到这一点?

  2. 如何才能了解转换时发生错误的值?

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