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

MySQLのMAKE_SET()関数とは?構文と使い方をわかりやすく解説

MySQLのMAKE_SET()関数は、10進数の数値をビット(2進数)に変換し、その数値の中で「1」が立っている(セットされている)すべてのビットに対応する文字列を、カンマ区切りのリスト(セット値)として返す関数です。最下位ビットには1番目の文字列、次に低いビットには2番目の文字列、というように順番に対応付けられます。

構文

MAKE_SET(bits, str1, str2,…)

各引数の意味は以下のとおりです。

  • bits:ビットを表す式です。10進数または2進数の値を指定できます。
  • str1, str2…:各ビットに対応付ける文字列のリストです。

使用例

mysql> Select MAKE_SET(1|2|4, 'Tutorials','Point','.com');

+---------------------------------------------+
| MAKE_SET(1|2|4, 'Tutorials','Point','.com') |
+---------------------------------------------+
| Tutorials,Point,.com                        |
+---------------------------------------------+

1 row in set (0.00 sec)

結果の解説

上記の例では、引数「1|2|4」はビット単位のOR演算により「7」(2進数で111)となります。この値の各ビットがどのように文字列に対応するかを見てみましょう。

  • 1番目のビットは「1」(2進数で001):右端の桁が1であるため、「Tutorials」が返されます。
  • 2番目のビットは「2」(2進数で010):中央の桁が1であるため、「Point」が返されます。
  • 3番目のビットは「4」(2進数で100):左端の桁が1であるため、「.com」が返されます。

その結果、これら3つの文字列がカンマで連結された「Tutorials,Point,.com」というセット値が返されるのです。

補足:NULLや0を指定した場合の挙動

MAKE_SET()関数を使用する際は、以下の点にも注意してください。

  • bitsにNULLを指定した場合:戻り値もNULLになります。
  • bitsに0を指定した場合:セットされたビットが存在しないため、空文字列が返されます。
  • 文字列リスト中にNULLが含まれる場合:該当するNULLの文字列は結果から除外され、それ以外の文字列のみが返されます。

このように、MAKE_SET()関数はビットフラグの組み合わせを人間が読みやすい形式の文字列に変換したい場合などに便利な関数です。

  1. MySQLのRANK()関数とは?順位付けの基本を実例つきで解説

    MySQLのRANK()関数とはMySQLのRANK()関数は、結果セットのパーティション内にある各行に対して順位(ランキング)を割り当てるためのウィンドウ関数です。同じ値を持つ行には同じ順位が付き、その後の順位が飛ばされる(ギャップが生じる)のが大きな特徴です。なお、RANK()関数はMySQL 8.0以降で利用できる機能です。それ以前のバージョンでは使用できないため、事前にバージョンを確認しておきましょう。ここからは、実際にテーブルを作成し、RANK()関数の動きを段階的に確認していきます。ステップ1:サンプルテーブルの作成まず、順位付けの対象となるシンプルなテーブルを作成します。mysq

  2. MySQLでCHAR()関数の逆の処理を行う方法|ASCII()とORD()の違いを解説

    MySQLにおいて、CHAR()関数の逆の働きをするのは ASCII() 関数と ORD() 関数です。CHAR() は数値(文字コード)を文字に変換する関数ですが、ASCII() は引数の文字列の左端の文字に対応する数値(ASCIIコード)を返し、ORD() は左端の文字の文字コードを返します。 ASCII()とORD()の違い どちらも文字から数値への変換を行う点は共通していますが、以下のような違いがあります。 ASCII():シングルバイト文字専用。マルチバイト文字を渡すと警告が出て64を返します。 ORD():マルチバイト文字にも対応しており、最初のバイトの値に基づいて計算された文字