web-dev-qa-db-ja.com

MySQLでは、1つの比較のみを使用してフィールドがNULLまたは空かどうかを確認できますか?

MySQLクエリを使用してフィールドがNULLまたは空かどうかを確認したい場合は、次のようなことができることを知っています。

column = '' OR column IS NULL

ただし、2つの個別の比較を行わずにこれを確認する方法はありますか?

20
vertigoelectric

COALESCE()を使用して値を「正規化」します(NULL値を空の文字列に変換します)。

_WHERE COALESCE(mycolumn, '') = ''
_

ドキュメントを読む: COALESCE()

またはその逆;空の文字列をNULLに変換します。

_WHERE NULLIF(mycolumn, '') IS NULL
_

ドキュメント: NULLIF()

これら2つのうち、ANSI SQL標準の一部であるCOALESCE()を好むでしょう。

あなたはそれを自分で試すことができます、これをしてください。

_SELECT 
    mycolumn                      AS orig_value,
    COALESCE(mycolumn, '')        AS coalesce_value,
    (COALESCE(mycolumn, '') = '') AS compare_result

FROM mytable;
_

これにより、元の値、「合体」値、および表のすべての行の比較結果が並べて表示されます。

33
thaJeztah
WHERE COALESCE(column, '') = ''
3
Esailija

WHEREを使用しない別の方法、これを試してください。

空の値とNULL値の両方を選択します

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
1
PodTech.io

これを試して:

WHERE NOT(column LIKE '_%')

NOTがない場合、列の値は少なくとも1文字である必要があり、NULLにはできません。

編集:MySQLはまだこの方法でNULL値を飲み込むようです。これはもっとうまくいくはずです:

WHERE IFNULL(column, '') = ''
0
Marcellus