PostgreSQL中与ISNULL()等效的函数是什么?

311
在 MS SQL-Server 中,我可以执行以下操作:SELECT ISNULL(Field,'Empty') from Table,但在 PostgreSQL 中会出现语法错误。如何模拟 ISNULL() 功能呢?

1
不,你不能在MSSQL中这样做。那段代码无法编译通过。ISNULL函数需要两个参数,并且如果第一个参数是null,则返回第二个参数,否则返回第一个参数。 - GSerg
@GSerg,你是对的。已经修复了。 - Byron Whitlock
Gserg和Byron,你们可以在这里看到示例来自我的电脑SELECT isnull( a.FechaEntregada ,'') as test from dbo.Amonestacion a https://msdn.microsoft.com/zh-cn/library/ms184325.aspx - Juan
4个回答

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

更符合习惯的写法:

SELECT coalesce(field, 'Empty') AS field_alias

59
"对于 coalesce 给予加一赞(+1)。(附注:在 MS SQL Server 中也可以使用该函数。)" - Alison R.
5
使用IS NULL的其他情况也存在,因此了解两种方法是很有好处的。 - Kyle Butt
36
值得注意的是,在 SQL 标准中使用的是 coalesce 函数,而 isnull 则是微软特有的函数,本质上与只有两个参数的 coalesce 函数相同。 - GSerg
5
Coalesce() 函数在处理类型提升时的行为与 UNION SELECT 完全相同,而 IsNull() 不会。 - ErikE
8
值得指出的是,ISNULL和COALESCE不同。IsNull强制结果类型为参数1的类型,而coalesce对每个参数使用各自的类型。如果你只是简单地用COALESCE替换ISNULL进行查找和替换,可能会出现很多错误... - Stefan Steiger
显示剩余2条评论

101

使用COALESCE()代替:

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

Coalesce提供了比ISNULL更多的功能。它的作用类似于ISNULL,但是会返回列表中第一个非空值。因此:

SELECT COALESCE(null, null, 5); 

返回 5,而

SELECT COALESCE(null, 2, 5);

返回 2

Coalesce 可以接收大量的参数。没有记录的最大值。我测试了100个参数它成功执行了。这对于绝大部分情况应该足够了。


28

我如何模拟ISNULL()函数的功能?

SELECT (Field IS NULL) FROM ...

5
这会模拟 isnull 函数的确切功能,不确定为什么它被踩了。 - smackshow
当然,这个问题的最佳答案是ISNULL()。COALESCE()非常聪明和有趣,但它不能在封闭时执行ISNULL()。 - Skrol29
20
我不知道你们评论者所指的ISNULL是什么,但是在SQL Server中,field IS NULL会返回一个布尔值,而ISNULL则类似于COALESCE:它会返回非空值中的一个。这篇答案是非常错误的,请查看文档:ISNULL - jpmc26
14
我怀疑这些评论者是MySQL用户,没有意识到问题是以“在MS SQL Server中…”开头的。MySQL有一个ISNULL()函数,它接受一个参数并返回0或1。T-SQL的版本接受两个参数,并像COALESCE或Oracle的NVL一样运行。 - David Noha
2
答案是错误的。虽然在上面的评论中已经解释了,但仍有一些人不明白为什么。奇怪... - greatvovan
3
无论原帖作者是否有意,我相信人们想要的答案是“如何检查字段是否为空”,而不仅仅是“ISNULL函数如何工作”。对我来说就是这种情况,这个答案完美地解决了这个问题。 - Freeman Helmuth

21

尝试:

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

6
这很好,因为它涵盖了当文本字段不为空,但也“空白”的情况。 - soulia
这是一个不错的补充,但实际上它混淆了原始问题,基本上是在追加“如何将非空字段强制转换为null?” - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接