MySQLでBOOLEAN型として保存された性別の値を文字列(MALE/FEMALE)として抽出する方法
はじめに
MySQLでは、BOOLEAN型のカラムは内部的にTINYINT(1)として扱われ、trueは「1」、falseは「0」として保存されます。そのため、表示の際には数値ではなく「MALE」や「FEMALE」のような文字列に変換して取得したいケースがよくあります。本記事では、IF関数を使ってブール値を文字列として抽出する方法を解説します。
サンプルテーブルの作成
まず、以下のコマンドでテーブルを作成します。
mysql> create table DemoTable815(Gender BOOLEAN);
Query OK, 0 rows affected (0.84 sec)
レコードの挿入
INSERT文を使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable815 values(true);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable815 values(false);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable815 values(false);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable815 values(true);
Query OK, 1 row affected (0.16 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable815;
実行結果は以下のとおりです。ブール値が「1」「0」という数値で格納されていることがわかります。
+--------+
| Gender |
+--------+
| 0 |
| 0 |
| 1 |
+--------+
4 rows in set (0.00 sec)
ブール値を文字列として抽出するクエリ
BOOLEAN型として保存された性別の値を文字列として抽出するには、IF関数を使用します。条件がtrueの場合は「MALE」、falseの場合は「FEMALE」を返します。
mysql> select if(Gender=true,'MALE','FEMALE') AS String from DemoTable815;
実行すると、次のような出力が得られます。
+--------+
| String |
+--------+
| MALE |
| FEMALE |
| FEMALE |
| MALE |
+--------+
4 rows in set (0.00 sec)
補足:CASE式を使った方法
IF関数の代わりにCASE式を使っても同じ結果が得られます。条件が複雑になる場合や可読性を重視したい場合は、CASE式の利用をおすすめします。
mysql> SELECT CASE WHEN Gender = true THEN 'MALE' ELSE 'FEMALE' END AS String FROM DemoTable815;
まとめ
MySQLでBOOLEAN型のカラムを文字列として取得するには、IF関数またはCASE式を活用します。どちらもシンプルな構文で実装でき、表示用途に応じて柔軟に対応できるため、実務でも頻繁に使われるテクニックです。
-
MySQLのテーブルデータはWindowsのどこに保存される?確認方法をわかりやすく解説
MySQLテーブルデータの保存場所を確認する方法MySQLで作成したテーブルのデータが、実際にWindows上のどの場所に保存されているのかを知りたいケースはよくあります。そんなときは、システム変数「datadir」を確認することで、データディレクトリの場所を簡単に把握できます。まずは、最もシンプルな方法として「@@datadir」を参照する構文を見てみましょう。select @@datadir;また、SHOW VARIABLESコマンドを使って確認することもできます。その場合の構文は以下の通りです。show variables where Variable_name = datadir;実際
-
MySQLのユーザー定義変数の値を結果テーブルに表示する方法
MySQLでは、@を使ってユーザー定義変数を宣言し、concat_ws()関数と組み合わせることで、文字列を連結した結果をそのまま結果テーブルに表示できます。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1508 -> ( -> StudentFirstName varchar(20), -> StudentLastName varchar(20) -> ); Query OK, 0 rows affected (0.55 sec)続いて、insertコマンドを使ってテーブルに