ChatGPT解决这个技术问题 Extra ChatGPT

ISNULL() 的 PostgreSQL 等价物是什么

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

SELECT ISNULL(Field,'Empty') from Table

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

不,你不能在 MSSQL 中这样做。该代码将无法编译。 ISNULL 接受两个参数并返回第二个是第一个是 null,否则是第一个。
@GSerg,你是对的。解决了这个问题。
Gserg 和 Byron 是的,你可以在这里看到 Example from my PC SELECT isnull(a.FechaEntregada ,'') as test from dbo.Amonestacion a msdn.microsoft.com/en-us/library/ms184325.aspx

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

或者更惯用的:

SELECT coalesce(field, 'Empty') AS field_alias

coalesce +1。 (PS 你也可以在 MS SQL Server 中做到这一点。)
不过,还有其他使用 IS NULL 的情况,因此最好同时了解这两种情况。
我认为值得注意的是 SQL 标准中的 coalesce,其中 isnull 是一个特定于 MS 的函数,它本质上是只有两个参数的 coalesce
Coalesce() 还可以正确处理类型提升(就像 UNION SELECT 所做的那样),而 IsNull() 则没有。
值得指出的是,ISNULL 和 COALESCE 并不相同。 IsNull 将结果类型强制为 argument1 的类型,而 coalesce 为每个参数使用各自的类型。如果你只是用 coalesce 搜索和替换 isnull,你可能会得到很多错误......
R
Richard D

请改用 COALESCE()

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

它的功能与 ISNULL 非常相似,但提供了更多功能。 Coalesce 将返回列表中的第一个非空值。因此:

SELECT COALESCE(null, null, 5); 

返回 5,而

SELECT COALESCE(null, 2, 5);

返回 2

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


S
Satpal

如何模拟 ISNULL() 功能?

SELECT (Field IS NULL) FROM ...

这模拟了 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 函数究竟是如何工作的”。我就是这种情况,这个答案非常适合。
S
Smern

尝试:

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

这很好,因为它涵盖了文本字段不为空但也为“空”的情况。
佚名

创建以下函数

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 所以没有人讨厌任何人。