2

我有一列 varchar 数据类型填充了混合值,例如 1.2、5.33,同时还有 NULL 和 EMPTY 字符串。我想将所有值转换为十进制,同时将 NULL 和 EMPTY 字符串视为 0。

我可以使用如下所示的 CONVERT 函数更改 NULL 或 EMPTY 字符串。像这样,我用 varhcar 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'))但是它失败了,因为我在这里没有处理 EMPTY 字符串。

任何想法我该如何解决这个问题。

4

2 回答 2

4

简单的方法:

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

您的CASE陈述不起作用,因为您正在检查 if Column1 = NULL。你应该检查一下IS NULL

CASE WHEN Column1 = '' OR Column1 IS NULL THEN '0' ELSE Column1 END AS 'NewColumn1'
于 2017-04-04T07:41:04.317 回答
2

试试这个,

SELECT CAST(ISNULL(NULLIF(Column1, ''),0) AS DECIMAL(12,2)) FROM table
于 2017-04-04T07:48:26.420 回答