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

Converting varchar values to decimal while handling NULLs and EMPTY strings as 0

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

我可以使用如下所示的 CONVERT 函数更改 NULL 或 EMPTY 字符串。像这样,我将 NULL 和 EMPTY 字符串替换为 varhcar 0.

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 字符串。

有什么办法可以解决这个问题。

简单方法:

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'

试试这个,

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