我有一个列可以存储文本,但用于存储一个数字(我没有制造系统!)有人已经把一个空值(即不是内容,但不空)及其导致的错误: -转换数据类型(varchar)仍然显示转换错误
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.
我有问题降低到以下: -
SELECT
T1.[FIELD_5],
ISNUMERIC(T1.[FIELD_5]),
NULLIF(T1.[FIELD_5],''),
ISNULL(NULLIF(T1.[FIELD_5],''),0),
CONVERT(DECIMAL(18,5),ISNULL(NULLIF(T1.[FIELD_5],''),0))
FROM
[MyTBL] T1
ORDER BY
ISNUMERIC(T1.[FIELD_5])
问题的数据是[FIELD_5]
- 我可以看到SQL认为的不是数字的值
- 我可以看到
NULLIF
成功将其更改为一个NULL
值 - 我可以看到
ISNULL
正在转动NULLIF
结果0
但在CONVERT
上的错误消息ISNULL
结果的结果,我希望它导致0.00000
SQL服务器的什么版本?在以后的版本中,您可以使用TRY_PARSE – DhruvJoshi
您确定没有空格或不可打印的字符吗?你知道'ISNUMERIC()'的局限性吗? – HoneyBadger
我无法解释它是如何被捕获的,但我已经给出了解释'1E-07'的解释,并将其视为数字。 –