MySQLで文字列結合処理を行う方法について紹介します。
刀剣DB(ToukenDB)の刀剣情報(Touken)テーブルに以下のレコードが格納されているとします。
id(刀剣ID) | name(刀剣名) | name_kana(刀剣名カナ) |
1 | 陸奥守吉行 | ムツノカミヨシユキ |
2 | 三日月宗近 | ミカヅキムネチカ |
3 | 燭台切光忠 | ショクダイキリミツタダ |
MySQLの機能を使用して、『刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です』と出力するように文字列結合を行います。
「CONCAT」で文字列を結合できます。
『mysql> SELECT CONCAT("刀剣ID(", id, ")は、", name, "(", name_kana, ")です") FROM Touken』
「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「刀剣ID(2)は、三日月宗近(ミカヅキムネチカ)です」
「刀剣ID(3)は、燭台切光忠(ショクダイキリミツタダ)です」
「CONCAT_WS」は、指定文字を間に入れて、文字列を結合できます。
第1引数の文字が、間に挟み込まれます。
『mysql> SELECT CONCAT_WS(" ", name, name_kana) FROM Touken』
「陸奥守吉行 ムツノカミヨシユキ」
「三日月宗近 ミカヅキムネチカ」
「燭台切光忠 ショクダイキリミツタダ」
「パイプ(||)」でも、文字列を結合できます。
※SQL_MODEに「PIPES_AS_CONCAT」の設定が必要です。
『mysql> SET SQL_MODE="PIPES_AS_CONCAT" 』
『mysql> SELECT "刀剣ID(" || id || ")は、" || name || "(" || name_kana || ")です" FROM Touken』
「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「刀剣ID(2)は、三日月宗近(ミカヅキムネチカ)です」
「刀剣ID(3)は、燭台切光忠(ショクダイキリミツタダ)です」
刀剣DB(ToukenDB)の刀剣情報(Touken)テーブルに以下のレコードが格納されているとします。
id(刀剣ID) | name(刀剣名) | name_kana(刀剣名カナ) |
1 | 陸奥守吉行 | ムツノカミヨシユキ |
2 | NULL | ミカヅキムネチカ |
3 | 燭台切光忠 | NULL |
この状態で、上記と同じように、CONCATで文字列結合を行います。
『mysql> SELECT CONCAT("刀剣ID(", id, ")は、", name, "(", name_kana, ")です") FROM Touken』
「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「」←NULL
「」←NULL
CONCATでの文字列結合対象の中にNULLが含まれていると、全体がNULLになってしまいます。
「IFNULL」を使用すると、NULLを空白文字に変換することで回避できます。
『mysql> SELECT CONCAT("刀剣ID(", id, ")は、", IFNULL(name, ""), "(", IFNULL(name_kana, ""), ")です") FROM Touken』
「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「刀剣ID(2)は、(ミカヅキムネチカ)です」
「刀剣ID(3)は、燭台切光忠()です」
テーブル内に格納されている日時カラムデータを出力する際には、さまざまなフォーマットを指定できます。
日時単位 | 形式 | 出力例 | 書式 |
年 | 西暦4桁 | 2016 | %Y |
年 | 西暦2桁 | 16 | %y |
月 | ゼロ埋め | 05 | %m |
月 | 英名 | May | %M |
日 | ゼロ埋め | 07 | %d |
曜日 | 英名 | Tuesday | %W |
時 | 24時間形式ゼロ埋め | 09 | %H |
分 | ゼロ埋め | 09 | %i |
秒 | ゼロ埋め | 09 | %S |
DATE_FORMATを使用すると、フォーマット指定出力できます。
現時刻を表示する例
『mysql> SELECT DATE_FORMAT(now(),'%Y/%m/%d')』
↓
「2016/05/17」
Touken(刀剣)テーブルに以下のデータが入っているとします。
id(刀剣ID) | name(刀剣名) | create_date(登録日時) |
1 | 大和守安定 | 2016/05/17 10:05:12 |
2 | 和泉守兼定 | 2016/05/18 10:15:34 |
3 | 鶯丸 | 2016/05/19 10:30:56 |
『[刀剣名]の登録日時は、[登録日時]です。』のように出力します。
『mysql> SELECT CONCAT(name, "の登録日時は、", DATE_FORMAT(create_date,'%Y年%m月%d日 %H時%i分'), "です。") FROM Touken』
↓
「大和守安定の登録日時は、2016年05月17日 10時05分です。」
「和泉守兼定の登録日時は、2016年05月18日 10時15分です。」
「鶯丸の登録日時は、2016年05月19日 10時30分です。」
『[刀剣名]の登録日は、[登録日]です。』のように出力します。
『mysql> SELECT CONCAT(name, "の登録日は、", DATE_FORMAT(create_date,'%d %M %Y'), "です。") FROM Touken』
↓
「大和守安定の登録日は、17 May 2016です。」
「和泉守兼定の登録日は、18 May 2016です。」
「鶯丸の登録日は、19 May 2016です。」
MySQLには、日時に関する便利な内部関数がいろいろと用意されています。これらの関数を利用することで、日時データをフォーマット指定出力する以上の処理を行えます。
関数名 | 機能概要 |
DAYNAME | 曜日名(英語)を取得 |
QUARTER | 四半期を取得 |
DATEDIFF | 日付間の日数計算 |
DATE_ADD | 日付加算 |
DATE_SUB | 日付減算 |
SEC_TO_TIME | 秒→時刻に変換 |
TIME_TO_SEC | 時刻→秒に変換 |
2022年09月28日(金)16:00~16:55 「ビッグデータ処理のデータベースとして MySQL HeatWave が最適な理由 〜AWS Aurora/Redshift、GCP BigQuery との性能&コスト比較〜」 と題したウェビナーが開催されました。 皆様のご参加、誠にありがとうございました。 当日の資料は以下から無料でご覧いただけます。 ご興味のある企業さま、ぜひご...
OSS×Cloud ACCESS RANKING