uza*_*y95 15 t-sql sql-server casting
我有一个SQL Server数据库.
一个字段具有类似的值
ID VALUE
1 NEGATIF
2 11.4
3 0.2
4 A RH(+)
5 -----
6 >>>>>
7 5.6<
8 -13.9
Run Code Online (Sandbox Code Playgroud)
我想将CONVERT VALUE字段转换为十进制,当然还有可转换字段.
什么样的SQL语句可以做到这一点?
如何理解转换时哪个值会引发错误?
PS:我认为这可以解决 WHERE VALUE LIKE '[a-z]'但是如何添加更多像[ - +()]这样的过滤器?
gbn*_*gbn 65
普通的ISNUMERIC是垃圾
+,-和. are all valid+.等1e-3 对于float而不是十进制有效(除非你CAST浮动然后到十进制)对于特别隐蔽但故障保护溶液,附加e0或.0e0 然后使用ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Run Code Online (Sandbox Code Playgroud)
所以
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable
Run Code Online (Sandbox Code Playgroud)