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

MySQLのSELECTステートメントでCASE式を使って値「1」を「Y」に変換する方法


MySQLでは、SELECTステートメントの中でCASE式を使うことで、カラムの値を別の値や文字列に変換して取得できます。本記事では、tinyint型のフラグ値である「1」を「Y」に置き換えて表示する方法を、具体的な手順とともに解説します。

1. サンプルテーブルの作成

まずは動作確認用のテーブルを作成します。以下がCREATE TABLE文の例です。

mysql> create table changeValuefrom1toY
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> isValidAddress tinyint(1),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.76 sec)

このテーブルは、自動採番されるIdカラムと、住所の有効性を示すisValidAddressカラム(0または1の値を持つtinyint型)で構成されています。

2. テストデータの挿入

続いて、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into changeValuefrom1toY(isValidAddress) values(1);
Query OK, 1 row affected (0.22 sec)
mysql> insert into changeValuefrom1toY(isValidAddress) values(0);
Query OK, 1 row affected (0.16 sec)
mysql> insert into changeValuefrom1toY(isValidAddress) values(1);
Query OK, 1 row affected (0.19 sec)
mysql> insert into changeValuefrom1toY(isValidAddress) values(1);
Query OK, 1 row affected (0.15 sec)
mysql> insert into changeValuefrom1toY(isValidAddress) values(1);
Query OK, 1 row affected (0.16 sec)
mysql> insert into changeValuefrom1toY(isValidAddress) values(0);
Query OK, 1 row affected (0.12 sec)
mysql> insert into changeValuefrom1toY(isValidAddress) values(1);
Query OK, 1 row affected (0.49 sec)

3. 登録されたデータの確認

SELECT文ですべてのレコードを表示して、挿入したデータを確認しましょう。

mysql> select *from changeValuefrom1toY;

実行すると、以下のような結果が得られます。

+----+----------------+
| Id | isValidAddress |
+----+----------------+
|  1 |              1 |
|  2 |              0 |
|  3 |              1 |
|  4 |              1 |
|  5 |              1 |
|  6 |              0 |
|  7 |              1 |
+----+----------------+
7 rows in set (0.00 sec)

4. CASE式で1を「Y」に変換する

ここからがポイントです。CASE式を組み合わせることで、isValidAddressが1の場合は「Y」を返し、それ以外の場合は元の値をそのまま出力することができます。

mysql> select *,case
    -> when isValidAddress=1 THEN 'Y'
    -> ELSE isValidAddress
    -> END AS Answer
    -> from changeValuefrom1toY;

実行結果は以下の通りです。Answerカラムを見ると、値が1だった行がすべて「Y」に変換されていることがわかります。

+----+----------------+--------+
| Id | isValidAddress | Answer |
+----+----------------+--------+
|  1 |              1 | Y      |
|  2 |              0 | 0      |
|  3 |              1 | Y      |
|  4 |              1 | Y      |
|  5 |              1 | Y      |
|  6 |              0 | 0      |
|  7 |              1 | Y      |
+----+----------------+--------+
7 rows in set (0.00 sec)

CASE式の仕組み

このクエリでは、when isValidAddress = 1 THEN 'Y'という条件判定を行い、値が1の行に対して文字列「Y」を返しています。条件に当てはまらない行は、ELSE isValidAddressの指定により、元の値(この場合は0)がそのまま表示されます。

もし「0」も「N」に変換したい場合は、WHEN句をもう一つ追加するか、ELSEの部分をELSE 'N'に変更するだけで簡単に対応できます。CASE式を活用すれば、SQL側で柔軟に表示形式をコントロールできるため、アプリケーション側での変換処理を減らすことにも役立ちます。


  1. MySQLでSELECT文の中にCASE式を使う方法を解説

    MySQLでは、SELECT文の中でCASE WHEN式を使うことで、条件に応じた値を返すことができます。本記事では、具体的なサンプルを使いながら、その基本的な使い方をわかりやすく解説します。1. サンプルテーブルの作成まず、デモ用のテーブルを作成します。mysql> create table DemoTable -> ( -> FirstName varchar(20), -> Score int -> );Query OK, 0 rows affected (0.63 sec)2. テストデータの挿入INSERTコマンドを使って、いくつか

  2. MySQLのCASEステートメントで空の値にカスタム名を表示する方法

    MySQLで空の値(空文字列)を含むカラムを取得する際、そのまま表示すると見栄えが悪くなることがあります。そんなときに便利なのが CASE WHEN ステートメントです。この記事では、空の値に対して任意のカスタム名を表示する方法を、実際のSQL例とともにわかりやすく解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(20) -> ); Query OK, 0 rows affected (0.62 sec)テストデータの挿入次に