【问题标题】:Replace NULL in my Table with <SOME VALUE> in PostgreSQL用 PostgreSQL 中的 <SOME VALUE> 替换我的表中的 NULL
【发布时间】:2018-05-23 14:49:00
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以在表的该列上添加“非空”约束。这将限制将来插入任何 null
  • 哦,我正在将数据从 CSV 复制到我的表中,所以 NOT NULL 对我不起作用(我相信这是因为我在定义表?如果我错了,请纠正我)
  • 在这种情况下,COALESCE 是一个不错的选择。否则,您可以在表的插入上添加触发器并从那里替换任何 Null 值,无论插入来自哪个查询
  • 是否有很多列具有空值?
  • 大约 5 列的 NULL 值分散在其中?我只是认为,如果我最初删除它们以避免在查询中多次 COALESCING 会更干净,但是我是 SQL 的新手,所以不确定最佳实践等。

标签: sql postgresql null


【解决方案1】:

你可以做一个更新:

UPDATE table SET col1 = 0 WHERE col1 IS NULL;

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

【讨论】:

  • 感谢您的建议!这绝对有效;但是,我不确定 value = NULL 是有效的语法。不应该是value IS NULL吗?
  • @phao5814 应该是IS NULL
【解决方案2】:

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

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

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

【讨论】:

  • nvl 在 Oracle 上可用,而不是 Postgres,后者使用 coalesce
猜你喜欢
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2014-12-20
  • 1970-01-01
  • 2021-09-27
  • 2011-09-07
  • 1970-01-01
相关资源
最近更新 更多