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

MySQLのSETカラムを整数オフセットのリストとして取得する方法

MySQLのSETカラムを整数オフセットとして扱うには

MySQLでは、MAKE_SET()関数を使用することで、SET型カラムの値を整数オフセット(ビット位置)に基づくリストとして取得できます。SET型は内部的にビットマップとして格納されており、各要素が1、2、4、8…という2の累乗の値に対応しています。

ここでは、動作を理解するために「set_testing」というテーブルを作成します。

mysql> CREATE TABLE set_testing(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
types SET('ABC','ABD','GHF') NOT NULL
);
Query OK, 0 rows affected (0.08 sec)

次に、数値を指定してデータを挿入します。挿入する数値は、SET要素のビット位置に対応します。

mysql> INSERT INTO set_testing (types) VALUES ('1');
Query OK, 1 row affected (0.06 sec)

mysql> INSERT INTO set_testing (types) VALUES ('2');
Query OK, 1 row affected (0.06 sec)

mysql> INSERT INTO set_testing (types) VALUES ('3');
Query OK, 1 row affected (0.02 sec)

mysql> INSERT INTO set_testing (types) VALUES ('4');
Query OK, 1 row affected (0.02 sec)

テーブルの内容を確認すると、挿入した数値が対応するSET要素の文字列へ自動的に変換されていることがわかります。

mysql> SELECT * FROM set_testing;
+----+---------+
| id | types   |
+----+---------+
|  1 | ABC     |
|  2 | ABD     |
|  3 | ABC,ABD |
|  4 | GHF     |
+----+---------+
4 rows in set (0.00 sec)

MAKE_SET()関数で整数オフセットのリストを取得する

以下のクエリを実行すると、SETカラムの値を整数オフセットのリストとして取得できます。types+0と記述することでSETの値が数値(ビットマスク)に変換され、MAKE_SET()関数がそのビット位置に応じた文字列を返します。

mysql> SELECT MAKE_SET(types+0, '1', '2', '3') AS output FROM set_testing;
+--------+
| output |
+--------+
| 1      |
| 2      |
| 1,2    |
| 3      |
+--------+
4 rows in set (0.00 sec)

仕組みの解説

MAKE_SET()関数は、第1引数で渡された数値をビットマスクとして解釈し、対応するビットが立っている位置の文字列をカンマ区切りで返します。上記の結果は次のように対応しています。

  • 1(2進数:001) → 1番目の要素のみ → 「1」
  • 2(2進数:010) → 2番目の要素のみ → 「2」
  • 3(2進数:011) → 1番目と2番目の要素 → 「1,2」
  • 4(2進数:100) → 3番目の要素のみ → 「3」

このように、SET型カラムとMAKE_SET()関数を組み合わせることで、数値と文字列の相互変換を柔軟に行え、ビットフラグの管理にも活用できます。

  1. MySQLで列(カラム)を分割する方法!SUBSTRING_INDEX関数の使い方を徹底解説

    MySQLで列を分割するには?SUBSTRING_INDEX関数の基本MySQLで1つの列に格納された文字列を区切り文字で分割したい場合、SUBSTRING_INDEX()関数を使用します。この記事では、アンダースコア(_)で区切られた氏名データを分割する具体例を通じて、その使い方をわかりやすく解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(40) -> );Query OK, 0 rows affected (1.

  2. MySQLのSET演算子で初期化されたすべての変数を一覧表示する方法

    MySQLのSET演算子で初期化されたすべての変数を一覧表示する方法MySQLでは、performance_schema.user_variables_by_thread テーブルを参照することで、SET文(SET演算子)によって初期化されたすべてのユーザー定義変数を一覧表示できます。基本構文は以下のとおりです。select * from performance_schema.user_variables_by_thread;変数を設定するまず、SET文を使って変数を設定してみましょう。以下の例では、@FirstName に「John」、@LastName に「Doe」という値をそれぞれ代入し