将varchar值转换为十进制数,同时将NULL和空字符串处理为0

3

我有一个varchar类型的列,其中填充了混合值,例如1.2、5.33,同时还有NULL和空字符串。

我想将所有值转换为十进制数,同时将NULL和空字符串视为0。

我可以使用CONVERT函数更改NULL或EMPTY字符串。像这样,我用varchar 0替换NULL和EMPTY字符串。

CASE WHEN Column1 = '' OR Column1= NULL THEN '0' ELSE Column1 END AS 'NewColumn1'

然而,我想做的是将NewColumn1的输出数据转换为十进制数,但是当我将CASE语句放入CONVERT或CAST函数中时,会出现错误。

我还尝试了以下操作:CONVERT(DECIMAL(10,4), ISNULL(Column1, '0')),但它失败了,因为我没有处理空字符串。

有什么解决这个问题的方法吗?


2
... OR Column1 IS NULL ... - undefined
CAST((CASE WHEN Column1='' OR Column1 IS NULL THEN '0' ELSE Column1 END ) AS DECIMAL(18,2)) - undefined
2个回答

7

简单方法:

SELECT CONVERT(DECIMAL(10, 4), ISNULL(NULLIF(Column1, ''), '0'))

您的CASE语句无法工作,因为您正在检查Column1 = NULL。您应该检查它是否IS NULL
CASE WHEN Column1 = '' OR Column1 IS NULL THEN '0' ELSE Column1 END AS 'NewColumn1'

谢谢Marko。这个第一个解决方案很有效,而且非常简洁。 - undefined
1
@user2307236 如果这个答案解决了你的问题,你需要接受它,仅仅说谢谢是不够的。此外,如果有很多问题都得到了很好的回答,但你没有接受好的答案,其他用户将不会关注你的问题。祝你好运。 - undefined

2

尝试这个:

SELECT CAST(ISNULL(NULLIF(Column1, ''),0) AS DECIMAL(12,2)) FROM table

这个不按要求工作 - 对于空字符串不起作用。 - undefined
我解决了那个问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接