什么是ISNULL()的PostgreSQL等价物

Byr*_*ock 239 sql-server postgresql null

在MS SQL-Server中,我可以这样做:

SELECT ISNULL(Field,'Empty') from Table

但是在PostgreSQL中我遇到了语法错误.我如何模拟ISNULL()功能?

Kyl*_*utt 430

SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias
Run Code Online (Sandbox Code Playgroud)

或者更惯用的:

SELECT coalesce(field, 'Empty') AS field_alias
Run Code Online (Sandbox Code Playgroud)

  • +1'coalesce`.(PS你也可以在MS SQL Server中这样做.) (48认同)
  • 我认为值得注意的是,它是SQL标准中的"coalesce",其中`isnull`是一个特定于MS的函数,本质上只有两个参数的"coalesce". (30认同)
  • 惊人!这个答案积累了30个完全错误语法的upvotes(刚刚修复).如果这就是人们投票的方式,那么晚安,民主! (25认同)
  • Coalesce()也正确处理类型提升(与UNION SELECT完全相同),而IsNull()则不然. (4认同)
  • 还有其他使用IS NULL的情况,所以两者都很好. (2认同)
  • `COALESCE` 是 ANSI 标准,支持 SQL Server 2000+ (2认同)
  • 当心在 COALESCE 内部对可空值进行操作,例如`COALESCE(my_table.nullable_column - my_table.cost_price, 0)`,因为您可能无法获得预期的合并零值。 (2认同)
  • 值得指出的是,ISNULL和COALESCE是不同的。IsNull将结果类型强制为argument1的类型,而coalcece对每个参数使用各自的类型。如果仅通过合并搜索和替换isull,则可能会出现很多错误... (2认同)

Jim*_*use 72

COALESCE()改为使用:

SELECT COALESCE(Field,'Empty') from Table;
Run Code Online (Sandbox Code Playgroud)

它的功能很像ISNULL,虽然提供了更多的功能.Coalesce将返回列表中的第一个非null值.从而:

SELECT COALESCE(null, null, 5); 
Run Code Online (Sandbox Code Playgroud)

返回5,而

SELECT COALESCE(null, 2, 5);
Run Code Online (Sandbox Code Playgroud)

返回2

Coalesce将采取大量的论点.没有记录的最大值.我测试了它将100个参数并且它成功了.对于绝大多数情况来说,这应该是充足的.


小智 23

如何模拟ISNULL()功能?

SELECT (Field IS NULL) FROM ...
Run Code Online (Sandbox Code Playgroud)

  • 我不知道你的评论者指的是什么`ISNULL`,但是`field IS NULL`给出了一个布尔值,而SQL Server中的`ISNULL`就像`COALESCE`一样运行:它返回一个非``NULL`值.这个答案非常错误.请参阅文档:[`ISNULL`](https://msdn.microsoft.com/en-us/library/ms184325.aspx). (14认同)
  • 我怀疑这些评论者是MySQL用户,他们没有意识到问题的开头,"在MS SQL Server中,..."MySQL有一个ISNULL()函数,它接受一个参数并返回0或1.T-SQL的版本需要两个参数和行为类似于COALESCE或Oracle的NVL. (8认同)
  • @artur你不明白isnull是如何工作的. (6认同)
  • 这模仿了isnull的确切功能,不知道为什么它被downvoted (4认同)
  • 伟大的沃万,无论这是否是原始海报的意图,我相信人们想要的是“我如何检查字段是否为空”的答案,而不一定是“ISNULL 函数究竟是如何工作的”。我就是这种情况,这个答案非常适合。 (3认同)
  • 答案是错误的。尽管上面的评论已经解释了这一点,但有些人仍然想知道为什么。诡异的... (2认同)

小智 15

尝试:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name
Run Code Online (Sandbox Code Playgroud)

  • 这很好,因为它涵盖了文本字段为非null但也为"空"的情况. (3认同)