SQLiteは空の場所を選択しますか?


回答:


288

次のようないくつかの方法があります。

where some_column is null or some_column = ''

または

where ifnull(some_column, '') = ''

または

where coalesce(some_column, '') = ''

where ifnull(length(some_column), 0) = 0

各ソリューションの利点は何ですか?
Pacerier、2011年

1
@Pacerier:パフォーマンスには多少の違いがあるかもしれませんが、それ以外は単なるスタイルの問題です。
Guffa

3
@Guffaもちろんパフォーマンスを意味します。これはデータベースですね。dbsでは最適化が重要です。少しパフォーマンスの向上であるたくさん
Pacerier

4
これはオンザフライで長さを計算する可能性があるため、length(some_column)は回避する必要があります。それ以外は、オプティマイザのなすがままです-私はそれらが同一であることを期待しますが。EXPLAINを使用してそれを確認できます。
peterchen 2012

@peterchen:はい、それはオプティマイザが何をするかに依存します。length数値を比較する方が文字列を比較するよりも簡単なので、状況によっては実際には高速になる可能性があるため、この例を含めました。そのパフォーマンスが気になる場合は、もちろんそれが何をするかを確認する必要があります。
Guffa

27

簡単にできるようです:

SELECT * FROM your_table WHERE some_column IS NULL OR some_column = '';

テストケース:

CREATE TABLE your_table (id int, some_column varchar(10));

INSERT INTO your_table VALUES (1, NULL);
INSERT INTO your_table VALUES (2, '');
INSERT INTO your_table VALUES (3, 'test');
INSERT INTO your_table VALUES (4, 'another test');
INSERT INTO your_table VALUES (5, NULL);

結果:

SELECT id FROM your_table WHERE some_column IS NULL OR some_column = '';

id        
----------
1         
2         
5    

1

もしかして

select x
from some_table
where some_column is null or some_column = ''

しかし、あなたが本当に質問しなかったので、私にはわかりません。


0

これは、次の方法で実行できます。

int counter = 0;
String sql = "SELECT projectName,Owner " + "FROM Project WHERE Owner= ?";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, "");
ResultSet rs = prep.executeQuery();
while (rs.next()) {
    counter++;
}
System.out.println(counter);

これにより、列の値がnullまたは空白である行の数がわかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.