我想在null-able列中将小数值0.000000和NULL都处理为NULL
例如:
case worthColumn
WHEN '0.000000' then NULL
WHEN NULL then NULL
ELSE worthColumn
END
AS SumOfWorth
但值0.000000总是在结果中结束?
答案 0 :(得分:8)
如果是小数,则不需要将其与字符串进行比较。使用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,因为它暂时失效)
答案 1 :(得分:1)
尝试删除0.000000附近的引号:
case worthColumn
WHEN 0.000000 then NULL
WHEN NULL then NULL
ELSE worthColumn
END
AS SumOfWorth
使用引号表示您将其与字符串进行比较。
答案 2 :(得分:0)
问题是数字真的接近零,但你没有看到额外的数字。这有两种方法可以做你想要的:
数值方法:
case WHEN abs(worthColumn ) < 0.0000005 then NULL
ELSE worthColumn
END) AS SumOfWorth
“make it a string”方法:
(case when format(worthColumn, 6) = '0.000000' then NULL
ELSE worthColumn
END) AS SumOfWorth