整数型の空のフィールドを選択するPostgreSQL


12

テーブルがあり、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
選択fk_fc_id、di_timestamp、fk_fc_idがnull data_itemからdi_item_valueは
foibs

2
二重引用符は、PostgreSQLの文字列には使用されません。文字列には一重引用符が使用されます。しかし、長さゼロの文字列を整数と比較するべきではありません!またnull=演算子を使用して値を比較すると、常に戻りnull、その行が除外されます。
コリントハート

回答:


20

これは実際にはデータベース管理に関連するものでも、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で正常に動作します
ペトル

0

単一引用符を使用する必要があります。

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

技術的には、SQLの文字列は単一引用符で区切る必要があります。ただし、この特定の場合、問題の列はとして定義されてintegerいるため、OPは最初に文字列(空かどうか)と比較しないでください。あなたが受け入れられた答えの下のコメントを読むことができるように、OPは空の文字列との比較を試みることを決めました。それは彼らがnullと実際に比較する方法を理解していなかったからです。
アンドリーM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.