MySQLのMAKE_SET()関数がNULLを返すのはどのような場合か?
MySQLのMAKE_SET()関数は、第1引数に指定したビット値そのものがNULLである場合に、結果としてNULLを返します。一方、文字列側の引数にNULLが含まれていても、それらは単に無視されるだけで、エラーにはなりません。
MAKE_SET()関数は、第1引数のビット値をもとに、対応する位置の文字列をカンマ区切りで連結して返す関数です。どのような条件でNULLが返るのか、具体的な実行例を見ていきましょう。
例1:第1引数(ビット値)がNULLの場合
mysql> Select MAKE_SET(NULL, 'A','B','C'); +-----------------------------+ | MAKE_SET(NULL, 'A','B','C') | +-----------------------------+ | NULL | +-----------------------------+ 1 row in set (0.00 sec)
この例では、ビット値となる第1引数がNULLです。どの文字列を選択すればよいか判断できないため、関数全体の戻り値がNULLになります。
例2:文字列側にNULLが含まれる場合
mysql> Select MAKE_SET(2, NULL,'B',NULL); +----------------------------+ | MAKE_SET(2, NULL,'B',NULL) | +----------------------------+ | B | +----------------------------+ 1 row in set (0.00 sec)
この例では、ビット値が「2」(バイナリで10)であるため、2番目の文字列「B」が選択されます。1番目と3番目のNULLは無視され、結果は「B」となります。
まとめ
- 第1引数(ビット値)がNULLの場合 → 結果はNULLになる
- 選択対象の文字列にNULLが含まれる場合 → そのNULLは無視され、残りの文字列だけで結果が構成される
このように、MAKE_SET()関数におけるNULLの扱いは、引数の位置によって挙動が異なる点に注意が必要です。
-
MySQLで入力がNULLの場合にDATE_FORMATからNULLを返す方法
MySQLで入力がNULLの場合にDATE_FORMATからNULLを返す方法 MySQLでは、IF()関数を組み合わせることで、日付カラムの値がNULLの場合にDATE_FORMAT関数の結果としてNULLを返すことができます。NULLデータを含むテーブルでも、意図どおりに日付を安全にフォーマットできる便利なテクニックです。 基本構文 構文は以下のとおりです。 SELECT IF(対象の日付カラム, DATE_FORMAT(対象の日付カラム, %d/%m/%Y), NULL) FROM テーブル名; IF()関数は、第1引数の条件が真(NULL以外の有効な値)であれば第2引数を返し、条件が
-
MySQLでNULLの値を別の列に0として表示する方法(CASE文の使い方)
MySQLでは、カラムの値がNULLである場合に、SELECT文の結果として新しい列に0を返したいケースがよくあります。例えば、価格データの欠損値を集計や表示のために0として扱いたい場合などです。このような場合には、CASE文を使用するのが最も基本的な方法です。CASE文を使うことで、条件に応じて異なる値を返すことができます。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable703 (Price int); Query OK, 0 rows affected (0.46 sec)2. テストデータを挿入す