题 什么是ISNULL()的PostgreSQL等价物


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

SELECT ISNULL(Field,'Empty') from Table

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


205
2018-02-06 19:59


起源


不,你不能在MSSQL中做到这一点。该代码将无法编译。 ISNULL 接受两个参数并返回第二个是第一个 null,否则第一个。 - GSerg
@GSerg,你是对的。修好了。 - Byron Whitlock
Gserg和Byron是的你可以在这里看到来自我的PC SELECT isnull(a.FechaEntregada,'')的示例来自dbo.Amonestacion a的测试 msdn.microsoft.com/en-us/library/ms184325.aspx - Juan


答案:


SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias

或者更惯用的:

SELECT coalesce(field, 'Empty') AS field_alias

365
2018-02-06 20:02



+1为 coalesce。 (P.S.你也可以在MS SQL Server中这样做。) - Alison R.
还有其他使用IS NULL的情况,所以两者都很好。 - Kyle Butt
我认为值得注意的是 coalesce 这是在SQL标准中,用 isnull 是一个特定于MS的功能,基本上是 coalesce 只有两个参数。 - GSerg
Coalesce()也正确处理类型提升(与UNION SELECT完全相同),而IsNull()则不然。 - ErikE
惊人!这个答案积累了30个完全错误语法的upvotes(刚刚修复)。如果这就是人们投票的方式,那么晚安,民主! - Erwin Brandstetter


使用 COALESCE() 代替:

SELECT COALESCE(Field,'Empty') from Table;

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

SELECT COALESCE(null, null, 5); 

返回5,而

SELECT COALESCE(null, 2, 5);

返回2

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


62
2018-01-10 21:15





如何模拟ISNULL()功能?

SELECT (Field IS NULL) FROM ...

19
2017-11-27 13:59



这模仿了isnull的确切功能,不知道为什么它被downvoted - smackshow
@artur你不明白isnull是如何工作的。 - datashaman
当然,问题的最佳答案。该表达式完全等同于ISNULL()。 COALESCE()非常聪明且有趣,但它在关闭时无法执行ISNULL()。 - Skrol29
我不知道是什么 ISNULL 你评论者指的是,但是 field IS NULL 给出一个布尔值,而 ISNULL 在SQL Server中运行就像 COALESCE:它返回一个非NULL 值。这个答案非常错误。查看文档: ISNULL。 - jpmc26
我怀疑这些评论者是MySQL用户,他们没有意识到问题的开头,“在MS SQL Server中,...”MySQL有一个ISNULL()函数,它接受一个参数并返回0或1.T-SQL的版本需要两个参数和行为类似于COALESCE或Oracle的NVL。 - David Noha


尝试:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name

11
2017-08-26 17:21



这很好,因为它涵盖了文本字段为非null但也为“空”的情况。 - soulia


创建以下功能

CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 "
    "is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql'

它会起作用。

您可以使用不同的参数类型创建不同的版本。


-7
2018-03-06 10:37



拜托,没有人这样做。使用coalesce()代替你的DBA并不讨厌你。 - Jordan
postgres请添加isnull所以没有人讨厌任何人。 - Eric Twilegar