SQL Serverで空文字("")とNULLを区別してチェックする4つの方法
SQL Serverで空文字("")とNULLを区別してチェックする方法
IS NULL と LEN() の組み合わせ
SELECT *
FROM テーブル名
WHERE カラム名 IS NOT NULL AND LEN(カラム名) > 0;
この例では、IS NULL
演算子でカラム名がNULLではないことを確認し、LEN()
関数でカラム名の長さが0より大きいことを確認しています。
利点:
- シンプルで分かりやすい
- すべてのバージョンのSQL Serverで利用可能
- 2つの条件をANDで結合するため、どちらか一方でも条件に合致すれば結果に含まれてしまう
COALESCE() 関数
SELECT *
FROM テーブル名
WHERE COALESCE(カラム名, '') <> '';
この例では、COALESCE()
関数を使用して、カラム名がNULLの場合に空文字("")を代入し、その結果が空文字("")と異なるかどうかをチェックしています。
- 1つの条件でNULLと空文字("")を区別できる
- 比較的分かりやすい
COALESCE()
関数はすべてのバージョンのSQL Serverで利用可能ではない
CASE 式
SELECT *
FROM テーブル名
WHERE CASE WHEN カラム名 IS NULL THEN 0 ELSE 1 END = 1;
- 柔軟な条件設定が可能
- 他の方法と比べて複雑
TRIM() 関数
SELECT *
FROM テーブル名
WHERE TRIM(カラム名) <> '';
- 空白文字も含めてチェックできる
- 空白文字("")とNULLを区別できない
- シンプルで分かりやすい方法を求める場合は、
IS NULL
とLEN()
の組み合わせを使用します。 - NULLと空文字("")を区別する必要がある場合は、
COALESCE()
関数またはCASE
式を使用します。 - 空白文字も含めてチェックする必要がある場合は、
TRIM()
関数を使用します。
-- テーブル作成
CREATE TABLE テーブル名 (
カラム名 VARCHAR(50)
);
-- データ挿入
INSERT INTO テーブル名 (カラム名) VALUES ('');
INSERT INTO テーブル名 (カラム名) VALUES (NULL);
-- 空文字("")とNULLを区別してチェック
SELECT *
FROM テーブル名
WHERE カラム名 IS NOT NULL AND LEN(カラム名) > 0;
このコードを実行すると、カラム名が空文字("")ではないかつ長さが0より大きいレコードのみが結果として返されます。
上記のサンプルコード以外にも、COALESCE()
関数、CASE
式、TRIM()
関数を使用して、空文字("")とNULLを区別してチェックすることができます。
それぞれの方法の詳細については、上記の解説を参照してください。
空文字("")とNULLを区別してチェックするその他の方法
CHARINDEX() 関数
SELECT *
FROM テーブル名
WHERE CHARINDEX('', カラム名) = 1;
LIKE 演算子
SELECT *
FROM テーブル名
WHERE カラム名 LIKE '%';
この例では、LIKE
演算子を使用して、カラム名が空文字("")または空文字("")を含む文字列かどうかをチェックしています。
- パフォーマンスが低下する可能性がある
EXISTS 関数
SELECT *
FROM テーブル名
WHERE EXISTS (SELECT * FROM (SELECT カラム名) AS t WHERE t.カラム名 <> '');
- 複雑な条件設定が必要な場合は、
EXISTS
関数を使用します。
sql sql-server