我想将可空列中的十进制值 0.000000 和 NULL 都作为 NULL 处理
例如:
case worthColumn
WHEN '0.000000' then NULL
WHEN NULL then NULL
ELSE worthColumn
END
AS SumOfWorth
但是值 0.000000 总是在结果中结束?
我想将可空列中的十进制值 0.000000 和 NULL 都作为 NULL 处理
例如:
case worthColumn
WHEN '0.000000' then NULL
WHEN NULL then NULL
ELSE worthColumn
END
AS SumOfWorth
但是值 0.000000 总是在结果中结束?
如果是小数,则无需将其与字符串进行比较。使用NULLIF
:
NULLIF(worthColumn,0)
如果您使用以下示例:
CREATE TABLE YourTable(A DECIMAL(20,3));
INSERT INTO YourTable
VALUES (10),(1),(NULL),(0.000),(20);
SELECT *, NULLIF(A,0)
FROM YourTable
然后你会得到以下结果:
╔════════╦══════════════════╗
║ A ║ (No column name) ║
╠════════╬══════════════════╣
║ 10.000 ║ 10.000 ║
║ 1.000 ║ 1.000 ║
║ NULL ║ NULL ║
║ 0.000 ║ NULL ║
║ 20.000 ║ 20.000 ║
╚════════╩══════════════════╝
(现在不能发布 sqlfiddle,因为它暂时关闭了)
尝试删除 0.000000 周围的引号:
case worthColumn
WHEN 0.000000 then NULL
WHEN NULL then NULL
ELSE worthColumn
END
AS SumOfWorth
有引号意味着您将其与字符串进行比较。
问题是数字确实接近于零,但您看不到多余的数字。这里有两种方法可以做你想做的事:
数值方法:
case WHEN abs(worthColumn ) < 0.0000005 then NULL
ELSE worthColumn
END) AS SumOfWorth
“使其成为字符串”方法:
(case when format(worthColumn, 6) = '0.000000' then NULL
ELSE worthColumn
END) AS SumOfWorth