5

在 Stack Overflow 上搜索将表中的 NULL 值替换为 0 的方法后,我发现许多线程似乎都指向使用 COALESCE 函数。例如,如果返回值为 null,则 postgresql 返回 0

我了解 COALESCE 函数“替换”您的特定查询的空值;但是,桌子本身保持不变。也就是说,如果您在没有 COALESCE 的单独查询中再次查询该表,空值仍然存在。

我的问题是,有没有办法让我用指定的值(如 0)永久替换表中的 NULL 值,这样我就不必在每个查询中都进行 COALESCE 了?作为我问题的延伸,修改原始表而不是在查询中进行操作是否被认为是不好的做法?

4

2 回答 2

12

你可以做一个更新:

UPDATE table SET col1 = 0 WHERE col1 IS NULL;

这应该有效地更新表上的所有匹配记录

于 2018-05-23T04:42:46.827 回答
0

我知道您得到了答案,但您也可以在进一步的查询nvl功能中使用。您可以在运行时将 NULL 值替换为 0,以确保您的查询按预期工作。

SELECT 
        id
       ,nvl(col1, 0)
FROM
       ...

它没有在表中更新,但您确定所有 NULL 值都显示为 0,如您所愿。可能你忘记更新了。

于 2018-05-23T06:49:00.467 回答