ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?
MySQLのMAKE_SET()関数におけるNULL文字列の扱い
MySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。
動作の仕組み
MAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった場合、その文字列は結果セットから除外されるため、該当する文字列が他に存在しなければ空の結果が返されます。
実行例
mysql> Select MAKE_SET(1, NULL,'A','B'); +---------------------------+ | MAKE_SET(1, NULL,'A','B') | +---------------------------+ | | +---------------------------+ 1 row in set (0.00 sec)
結果の解説
上記の例では、ビット値「1」は最初の文字列(NULL)のみに対応しています。MAKE_SET()関数はNULLの文字列をセットに含めないため、結果として空の文字列が返されています。なお、2番目の引数「'A'」や3番目の引数「'B'」はそれぞれビット値2と4に対応する文字列であり、今回指定したビット値1では選択対象外となるため、これらの文字列も結果には現れません。
-
【MySQL】NULL以外の値を先頭に、NULL値を末尾に表示してソートする方法
はじめに MySQLでは、ORDER BY句とIS NULLを組み合わせることで、NULL以外の値を持つ行を先に表示し、NULL値を持つ行を後に表示することができます。本記事では、実際のサンプルを使いながら、その具体的な手順と仕組みをわかりやすく解説します。 テーブルの作成 まずは、動作確認用のサンプルテーブルを作成しましょう。 mysql> create table DemoTable1357 -> ( -> StudentName varchar(40), -> StudentCountryName varchar(30) ->
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (