PostgreSQL的ISNULL()是什么


254

在MS SQL Server中,我可以执行以下操作:

SELECT ISNULL(Field,'Empty') from Table

但是在PostgreSQL中,我收到语法错误。如何模拟ISNULL()功能?


1
不,您无法在MSSQL中做到这一点。该代码将无法编译。ISNULL接受两个参数并返回第二个是第一个是null,否则返回第一个。
Gserg'2

@GSerg,您是对的。解决这个问题。
拜伦·惠特洛克

Gserg和拜伦是的,你可以在这里看到来自实例我的电脑SELECT ISNULL(a.FechaEntregada,“”)作为测试从dbo.Amonestacion一个 msdn.microsoft.com/en-us/library/ms184325.aspx
胡安

Answers:


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

或更惯用:

SELECT coalesce(field, 'Empty') AS field_alias

49
为+1 coalesce。(PS也可以在MS SQL Server中做到这一点。)
Alison R. 2010年

2
不过,在其他情况下,也可以使用IS NULL,因此最好同时了解这两种情况。
凯尔·巴特

30
我认为值得一提的是,这是coalesceSQL标准isnull中的一个特定于MS的函数,实际上coalesce只有两个参数。
Gserg

4
Coalesce()还可以正确处理类型提升(就像UNION SELECT一样),而IsNull()则不能。
ErikE 2010年

2
值得指出的是,ISNULL和COALESCE是不同的。IsNull将结果类型强制为argument1的类型,而coalcece对每个参数使用各自的类型。如果仅通过合并搜索和替换isull,则可能会出现很多错误……
Stefan Steiger

75

使用COALESCE()来代替:

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

它的功能与相似ISNULL,但提供了更多功能。合并将返回列表中的第一个非null值。从而:

SELECT COALESCE(null, null, 5); 

返回5,而

SELECT COALESCE(null, 2, 5);

返回2

Coalesce将接受大量争论。没有记录的最大值。我测试了100个参数,它成功了。对于绝大多数情况而言,这应该足够了。


24

如何模拟ISNULL()功能?

SELECT (Field IS NULL) FROM ...

4
这模仿了
isull

当然,这个问题的最佳答案。此表达式与ISNULL()完全等效。COALESCE()非常聪明且有趣,但是在关闭时无法执行ISNULL()。
Skrol29'2014-4-2

16
我不知道ISNULL您的评论者指的是什么,但是field IS NULL给出了一个布尔值,而ISNULL在SQL Server中的运行方式是COALESCE:它返回非NULL值之一。这个答案是完全错误的。请参阅文档:ISNULL
jpmc26 2015年

10
我怀疑这些评论者是MySQL用户,他们没有意识到问题始于“在MS SQL Server中,...” MySQL具有一个ISNULL()函数,该函数带有单个参数并返回0或1。T-SQL的版本采用两个参数,其行为类似于COALESCE或Oracle的NVL。
David Noha

1
greatvovan,无论这是否是原始张贴者的意图,我都相信人们所要的答案是“如何检查字段是否为空”,而不一定是“ ISNULL函数的工作原理”。我就是这种情况,这个答案很完美。
弗里曼·赫尔姆斯

15

尝试:

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

3
这很好,因为它涵盖了文本字段不为null而是“空”的情况。
soulia

-9

创建以下功能

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'

而且会起作用。

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


28
拜托,没有人这样做。请改用Coalesce(),这样您的DBA不会讨厌您。
约旦

1
postgres,请添加isnull,以便没人讨厌任何人。
埃里克·特威格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.