With Postgres 复合类型 http://www.postgresql.org/docs/9.2/static/rowtypes.html您基本上可以构建一个字段,其结构被定义为另一个表。我有一个名为“recipient”的复合字段,类型为“person”。在我的特定场景中,此收件人字段通常留空。检查复合字段是否为空的正确方法是什么?我试过:
select * from bla where recipient is not null
select * from bla where recipient is null
select * from bla where recipient = null
select * from bla where recipient != null
在所有这些情况下,它不会返回任何内容。那么如何正确检查复合值是否为空呢?
UPDATE
经过更多阅读后,看来这是我的问题:
有人可能会认为!(x IS NULL) = x IS NOT NULL
在所有情况下都是如此。但有一个例外——复合类型。当复合值的一个字段为NULL
另一个字段是NOT NULL
,那么两个运算符的结果都是 false。IS NULL
仅当所有字段都为 true 时才为 trueNULL
. IS NOT NULL
仅当所有字段都为 true 时才为 trueNOT NULL
。对于介于两者之间的任何情况,两个运算符都返回 false。
我确实有一些字段为空,而其他字段则不是。我希望如果复合字段中的任何项目不为空,则该字段将被视为 NOT NULL...而不是当它们全部不为空时。除了检查每个字段之外,还有什么办法可以解决这个问题吗?
IS NULL
and IS NOT NULL
也适用于复杂类型,因此这两个应该是合适的:
select * from bla where recipient is not null
select * from bla where recipient is null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)