MySQLのSELECT文で値「1」を「Y」に変換して表示する方法
MySQLでSELECT結果の1をYに変換するには?
MySQLでは、IF()関数を使うことで、SELECT文の取得結果に含まれる「1」を「Y」に変換して表示できます。テーブルのデータそのものを更新するわけではなく、表示のタイミングで値を変換できるのが特徴です。
基本構文
SELECT IF(カラム名, 'Y', カラム名) AS 別名 FROM テーブル名;
IF()関数は、第1引数の条件(または値)が真の場合に第2引数の値を、偽の場合に第3引数の値を返します。つまり、カラムの値が「1(真)」なら「'Y'」が返され、「0(偽)」なら元の値がそのまま返されます。
動作確認用テーブルの作成
それでは、実際に構文を確認してみましょう。まずはサンプル用のテーブルを作成します。
mysql> create table changeValuefrom1toY
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> isValidAddress tinyint(1),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.76 sec)ここでは、住所の有効性を示す「isValidAddress」というtinyint型のカラムを持つテーブルを作成しました。ブール値の代わりとしてtinyint(1)がよく使われます。
テストデータの挿入
次に、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)
登録データの確認
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)
IF()関数で1をYに変換するクエリ
いよいよ、値「1」を「Y」に変換して表示するクエリを実行します。
mysql> select if(isValidAddress,'Y',isValidAddress) as Answer from changeValuefrom1toY;
実行結果:
+--------+ | Answer | +--------+ | Y | | 0 | | Y | | Y | | Y | | 0 | | Y | +--------+ 7 rows in set (0.00 sec)
このように、「1」だったレコードはすべて「Y」と表示され、「0」のレコードは元の値のまま表示されました。
応用:0もNに変換したい場合
「0」も「N」に変換して表示したい場合は、IF()関数の第3引数を変更するだけです。
SELECT IF(isValidAddress, 'Y', 'N') AS Answer FROM changeValuefrom1toY;
これにより、フラグ値を見やすい形式に変換して画面表示やCSV出力などを行えます。CASE式を使っても同様の処理が可能なので、条件が複雑になる場合はCASE式の利用も検討するとよいでしょう。
-
MySQLでフィールド値に含まれるカンマの数をカウントする方法
MySQLでフィールド値に含まれるカンマの数をカウントする方法カンマ区切りで保存されたデータから、カンマがいくつ含まれているかを調べたいケースは意外と多くあります。MySQLではLENGTH()関数とREPLACE()関数を組み合わせることで、シンプルなクエリひとつでカンマの個数をカウントできます。基本構文以下がカンマをカウントするための基本構文です。select length(対象カラム名) - length(replace(対象カラム名, ,, )) as エイリアス名 from テーブル名;このクエリの仕組みは非常にシンプルです。元の文字列の長さから、カンマをすべて削除した文字列の長さを
-
MySQLで値が「0」の場合に別の列から値を取得する方法
MySQLで値が「0」の場合に別の列から値を取得する方法MySQLでは、IF()関数を使用することで、特定の列の値が「0」だった場合に、別の列の値を代わりに取得できます。条件分岐を1つのクエリ内で簡単に実現できる便利な関数です。IF()関数の基本構文select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName from yourTableName;この構文では、最初の列の値が「0」であれば2番目の列の値を返し、「0」以外であれば最初の列の値をそのまま返します。サンプルテーブルの作成まず、動作確認用のテー