PostgreSQL选择整数类型的空字段


13

我有一个表格,我需要选择所有fk_fc_id字段为空的行(以删除它们为前提),

    Column     |            Type             |                         Modifiers
---------------+-----------------------------+------------------------------------------------------------
 di_timestamp  | timestamp without time zone |
 di_item_value | character varying(10)       |
 fk_fc_id      | integer                     |
 di_id         | integer                     | not null default nextval('data_item_di_id_seq1'::regclass)

但这行不通

# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
                                                                    ^

尝试Null也不起作用。

如果有人对如何排序有任何建议,我将非常感谢。


1
从data_item中选择fk_fc_id,di_timestamp,di_item_value,其中fk_fc_id为null
2013年

2
在PostgreSQL中,双引号不用于字符串。单引号用于字符串。但是,您不应该将零长度字符串与整数进行比较!并且null使用=运算符比较值将始终返回null并导致该行被排除。
科林·哈特

Answers:


21

这实际上与数据库管理无关,也不与PostgreSQL有关,但是正如@foibs回答的那样,您应该看看IS NULL

 SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id IS NULL

1
啊,我在尝试= Null,而不是Null。谢谢,
詹姆斯

两者(=; IS)在9.4中都可以正常工作
Petr,

0

您必须使用单引号:

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''

从技术上来说,您是对的,SQL中的字符串应该用单引号分隔。但是,在这种特定情况下,OP不应首先与字符串(空或非空)进行比较,因为相关的列定义为integer。正如您在接受的答案下的注释中所读到的那样,OP决定尝试与空字符串进行比较只是因为他们没有弄清楚如何正确地将其与null进行比较(这实际上是在后面)。
Andriy M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.