MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのEXPORT_SET()関数は、引数にNULLが含まれる場合何を返すのか?

MySQLのEXPORT_SET()関数は、指定された引数のうちいずれか一つでもNULLが含まれている場合、必ずNULLを返します。これは、関数が正しく評価されるためにはすべての引数に有効な値が必要であることを意味します。

EXPORT_SET()関数の基本

EXPORT_SET()関数は、整数値をビット列として解釈し、各ビットが「1」ならon文字列、「0」ならoff文字列を区切り文字で連結して返す関数です。基本的な構文は以下の通りです。

EXPORT_SET(bits, on, off [, separator [, number_of_bits]])

それでは、各引数の位置にNULLを指定した場合の動作を、具体的な例で確認していきましょう。

例1:第1引数(bits)がNULLの場合

mysql> Select EXPORT_SET(NULL, 'Y','N',',', 4);

+----------------------------------+
| EXPORT_SET(NULL, 'Y','N',',', 4) |
+----------------------------------+
| NULL                             |
+----------------------------------+

1 row in set (0.00 sec)

変換対象となる整数値(bits)がNULLのため、結果はNULLになります。

例2:第2引数(on文字列)がNULLの場合

mysql> Select EXPORT_SET(5, NULL,'N',',', 4);

+--------------------------------+
| EXPORT_SET(5, NULL,'N',',', 4) |
+--------------------------------+
| NULL                           |
+--------------------------------+

1 row in set (0.00 sec)

ビットが「1」のときに返すべき文字列がNULLのため、結果全体もNULLとなります。

例3:第5引数(ビット数)がNULLの場合

mysql> Select EXPORT_SET(5, 'Y','N',',', NULL);

+----------------------------------+
| EXPORT_SET(5, 'Y','N',',', NULL) |
+----------------------------------+
| NULL                             |
+----------------------------------+

1 row in set (0.00 sec)

処理するビット数の指定がNULLのため、やはりNULLが返されます。

例4:第4引数(区切り文字)がNULLの場合

mysql> Select EXPORT_SET(5, 'Y','N',NULL, 4);

+--------------------------------+
| EXPORT_SET(5, 'Y','N',NULL, 4) |
+--------------------------------+
| NULL                           |
+--------------------------------+

1 row in set (0.00 sec)

区切り文字がNULLであっても、結果はNULLになることが確認できます。

まとめ

以上の例からわかるように、EXPORT_SET()関数ではどの位置の引数にNULLを指定しても、戻り値は必ずNULLになります。実際のアプリケーションでこの関数を使用する場合は、引数にNULLが混入しないよう、IFNULL()やCOALESCE()などの関数を使って事前にNULL処理を行っておくと安全です。

  1. ビット値が1でも最初の文字列がNULLの場合、MySQLのMAKE_SET()関数は何を返す?

    MySQLのMAKE_SET()関数におけるNULL文字列の扱いMySQLのMAKE_SET()関数は、指定されたビット値に基づいて複数の文字列からセットを構築して返す関数です。ただし、ビットの値が1であっても、そのビットに対応する文字列がNULLである場合、関数はその文字列を結果に含めず、何も返しません(空の結果となります)。動作の仕組みMAKE_SET()関数では、第1引数のビット値によってどの文字列を選択するかが決まります。最下位ビット(値1)は最初の文字列に、次のビット(値2)は2番目の文字列に、というように各ビットが順番に対応しています。そして、選択対象となった文字列がNULLだった

  2. MySQLの<=>演算子とは?NULL安全な等価比較の使い方を解説

    MySQLには、NULL値も安全に比較できる特殊な等価演算子 <=>(NULL安全等価演算子)が用意されています。この記事では、<=> 演算子の動作と、通常の = 演算子との違いを具体例とともに解説します。 ケース1:通常の値の比較(= 演算子と同じ動作) <=> 演算子は、NULL以外の値同士を比較する場合、= 演算子とまったく同じように動作します。つまり、両辺の値が等しければ「1(TRUE)」、等しくなければ「0(FALSE)」を返します。 たとえば、次のような比較では、どちらの演算子でも結果は同じになります。 mysql> SELECT 10