我有一个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 '[a-z]'
但是如何添加更多过滤器,如[ - +()]?
答案 0 :(得分:61)
普通的ISNUMERIC是垃圾
+
,-
和
。都是有效的+.
等等1e-3
对浮点数有效但不是十进制(除非您将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