POSTGRES COALESCE(NULLIF(c.name,''),'未分配')不工作

时间:2016-08-23 20:01:57

标签: postgresql postgresql-9.4

如果没有值NULL,任何字符变化字段的版本都不会返回任何内容......它真的令人沮丧

CASE WHEN COALESCE(NULLIF(e.name,''),'unassigned') IS NULL THEN 'unassigned' ELSE a.name END

是我的最终测试,它仍然只返回NULL,除非该字段具有值

它的角色不同(255)

COALESCE(a.name,'unassigned') // won't work
NULLIF(a.name,'') // won't work
NULLIF(a.name,NULL) // won't work
COALESCE(NULLIF(a.name,''),'unassigned') // won't work

然而我使用它0的那一刻......

与此相关的是什么?

它是一个字符变化(255)字段,它被设置为默认为空

作为一个关键点,表列的构建是

name varying character(255) DEFAULT(NULL)

所以我知道它输入了NULL 我已经完成了

SELECT * FROM <tbl> WHERE name IS NULL;当然,我使用a.name返回所有NULL行...那么这个处理是什么?

1 个答案:

答案 0 :(得分:-1)

好的......每个人都决定回答我:

COALESCE(NULLIF(e.name,''),'unassigned') IS NULL...

此方法永远不会返回&#34;没有记录&#34;并且因为这是一个创建物化视图的存储过程,我通过嵌套查询进行轮询 - 其中列可能具有0(作为默认id = other_id)嵌套查询只是不返回任何行。如果未返回任何行,则COALESCENULLIF的函数将永远不会执行。必须返回一行才能使这些函数对行值进行操作...因为我从未听说过具有PK自动递增字段的表,从0开始并且通常从1结果集&#34;没有记录返回&#34;将始终将NULL值返回到物化视图列。

我之后运行的用于轮询该物化视图中的行的查询将正常运行为COALESCE(etc etc),因为现在该列中存在实际的NULL值。