What is the PostgreSQL equivalent for ISNULL()
在MS SQL-Server中,我可以这样做:
SELECT ISNULL(Field,'Empty') from Table
但是在PostgreSQL中我遇到了语法错误。 如何模拟ISNULL()功能?
-
不,你不能在MSSQL中做到这一点。 该代码将无法编译。 ISNULL接受两个参数并返回第二个是第一个是null,否则是第一个。
-
@GSerg,你是对的。 修好了。
-
Gserg和Byron是的你可以在这里看到我的电脑中的示例SELECT isnull(a.FechaEntregada,'')来自dbo.Amonestacion的测试a msdn.microsoft.com/en-us/library/ms184325.aspx
1
| SELECT CASE WHEN FIELD IS NULL THEN 'Empty' ELSE FIELD END AS field_alias |
或者更惯用的:
1
| SELECT COALESCE(FIELD, 'Empty') AS field_alias |
-
coalesce的+1。 (P.S.你也可以在MS SQL Server中这样做。)
-
还有其他使用IS NULL的情况,所以两者都很好。
-
我认为值得注意的是,coalesce是SQL标准,isnull是一个特定于MS的函数,基本上只有两个参数的coalesce。
-
coalesce是ANSI标准,并且支持SQL Server 2000+
-
Coalesce()也正确处理类型提升(与UNION SELECT完全相同),而IsNull()则不然。
-
惊人!这个答案积累了30个完全错误语法的upvotes(刚刚修复)。如果这就是人们投票的方式,那么晚安,民主!
-
谨防对COALESCE内的可空值进行操作,例如: COALESCE(my_table.nullable_column - my_table.cost_price, 0),因为您可能无法获得预期的合并零值。
-
值得指出的是,ISNULL和COALESCE并不相同。 IsNull强制结果类型为argument1的类型,而coalesce使用每个参数的相应类型。如果你只是通过coalesce搜索并替换isnull,你可能会遇到很多错误......
改为使用COALESCE():
1
| SELECT COALESCE(FIELD,'Empty') FROM TABLE; |
它的功能与ISNULL非常相似,但功能更多。 Coalesce将返回列表中的第一个非null值。 从而:
1
| SELECT COALESCE(NULL, NULL, 5); |
返回5,而
1
| SELECT COALESCE(NULL, 2, 5); |
返回2
Coalesce将采取大量的论点。 没有记录的最大值。 我测试了它将100个参数并且它成功了。 对于绝大多数情况来说,这应该是充足的。
How do I emulate the ISNULL() functionality ?
1
| SELECT (FIELD IS NULL) FROM ... |
-
这模仿了isnull的确切功能,不知道为什么它被downvoted
-
@artur你不明白isnull是如何工作的。
-
当然,问题的最佳答案。该表达式完全等同于ISNULL()。 COALESCE()非常聪明且有趣,但它在关闭时无法执行ISNULL()。
-
我不知道你的评论者指的是什么isnull,但是field IS NULL给出了一个布尔值,而SQL Server中的isnull像coalesce一样运行:它返回一个非NULL值。这个答案非常错误。请参阅文档:isnull。
-
我怀疑这些评论者是MySQL用户,他们没有意识到问题的开头,"在MS SQL Server中,..."MySQL有一个ISNULL()函数,它接受一个参数并返回0或1.T-SQL的版本需要两个参数和行为类似于COALESCE或Oracle的NVL。
-
这应该是公认的答案
-
答案是错的。虽然在上面的评论中对此进行了解释,但有些人仍然在想为什么。奇怪的...
-
greatvovan,无论这是否是原始海报的意图,我相信人们想要的是"如何检查字段是否为空"的答案,不一定是"ISNULL功能究竟如何工作"。我就是这种情况,这个答案非常适合。
尝试:
1
| SELECT COALESCE(NULLIF(FIELD, ''), another_field) FROM TABLE_NAME |
-
这很好,因为它涵盖了文本字段为非null但也为"空"的情况。
创建以下功能
1 2
| 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' |
它会起作用。
您可以使用不同的参数类型创建不同的版本。
-
拜托,没有人这样做。使用coalesce()代替你的DBA并不讨厌你。
-
postgres请添加isnull所以没有人讨厌任何人。