在 MS SQL-Server 中,我可以这样做:
SELECT ISNULL(Field,'Empty') from Table
但是在 PostgreSQL 中我得到一个语法错误。如何模拟 ISNULL()
功能?
ISNULL
接受两个参数并返回第二个是第一个是 null
,否则是第一个。
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias
或者更惯用的:
SELECT coalesce(field, 'Empty') AS field_alias
请改用 COALESCE()
:
SELECT COALESCE(Field,'Empty') from Table;
它的功能与 ISNULL
非常相似,但提供了更多功能。 Coalesce 将返回列表中的第一个非空值。因此:
SELECT COALESCE(null, null, 5);
返回 5,而
SELECT COALESCE(null, 2, 5);
返回 2
Coalesce 将采用大量参数。没有记录的最大值。我测试了 100 个参数,它成功了。对于绝大多数情况,这应该足够了。
如何模拟 ISNULL() 功能?
SELECT (Field IS NULL) FROM ...
ISNULL
,但 field IS NULL
给出了一个布尔值,而 SQL Server 中的 ISNULL
的操作类似于 COALESCE
:它返回非 NULL
值之一。这个答案大错特错。请参阅文档:ISNULL
。
尝试:
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
+1。 (PS 你也可以在 MS SQL Server 中做到这一点。)coalesce
,其中isnull
是一个特定于 MS 的函数,它本质上是只有两个参数的coalesce
。