勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法

  MySQL データベース

MySQLにdate型のカラムに誕生年月日が格納されており、そこから干支(十二支)を計算して取得したい。以下に対応方法をメモ。

 

テーブル構造とデータ内容

mysql> SHOW COLUMNS FROM `test_table`;
+----------+------+------+-----+---------+----------------+
| Field    | Type | Null | Key | Default | Extra          |
+----------+------+------+-----+---------+----------------+
| id       | int  | NO   | PRI | NULL    | auto_increment |
| birthday | date | NO   |     | NULL    |                |
+----------+------+------+-----+---------+----------------+

mysql> SELECT * FROM `test_table`;
+----+------------+
| id | birthday   |
+----+------------+
|  1 | 2020-01-01 |
|  2 | 2019-01-01 |
|  3 | 2018-01-01 |
|  4 | 2017-01-01 |
|  5 | 2016-01-01 |
|  6 | 2015-01-01 |
|  7 | 2014-01-01 |
|  8 | 2013-01-01 |
|  9 | 2012-01-01 |
| 10 | 2011-01-01 |
| 11 | 2010-01-01 |
| 12 | 2009-01-01 |
| 13 | 2008-01-01 |
+----+------------+

 

対応方法

SQL文

SELECT `birthday`, 
    CASE 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 0 THEN '子(ねずみ)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 1 THEN '丑(うし)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 2 THEN '寅(とら)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 3 THEN '卯(うさぎ)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 4 THEN '辰(たつ)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 5 THEN '巳(み)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 6 THEN '午(うま)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 7 THEN '未(ひつじ)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 8 THEN '申(さる)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 9 THEN '酉(とり)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 10 THEN '戌(いぬ)' 
        WHEN (DATE_FORMAT(`birthday`,"%Y") - 4) % 12 = 11 THEN '亥(い)' 
    END AS `eto`
FROM `test_table`;

出力結果

+------------+----------------+
| birthday   | eto            |
+------------+----------------+
| 2020-01-01 | 子(ねずみ)     |
| 2019-01-01 | 亥(い)         |
| 2018-01-01 | 戌(いぬ)       |
| 2017-01-01 | 酉(とり)       |
| 2016-01-01 | 申(さる)       |
| 2015-01-01 | 未(ひつじ)     |
| 2014-01-01 | 午(うま)       |
| 2013-01-01 | 巳(み)         |
| 2012-01-01 | 辰(たつ)       |
| 2011-01-01 | 卯(うさぎ)     |
| 2010-01-01 | 寅(とら)       |
| 2009-01-01 | 丑(うし)       |
| 2008-01-01 | 子(ねずみ)     |
+------------+----------------+

 

参考サイト

https://patareru.net/archives/129

 - MySQL データベース

  関連記事

MySQLで日時や日付で範囲検索する際に動作速度を向上させる方法

MySQLでログ系等の大量にデータが格納されているテーブルから日時や日付で範囲検 ...

MySQLで月別に集計を行う。あと日付時刻関数。

現在進行形でやっているデータ集計系だけど 新たな発見があったのでメモ。 ■日付時 ...

MySQLでテーブルとデータの複製(コピー)する方法

MySQLでテーブルとデータを複製したかった。ダンプとかではなく、簡単なSQL文 ...

MySQLでJOINの高速化

JOINで無茶苦茶悩んだのでメモ。やりたかった事は、MySQLで テーブルAには ...

MySQLで全角半角を区別せずに検索する方法(collate utf8_unicode_ci)

あるシステムでMySQLの検索時に「WHERE test_column coll ...