MySQLで日付に関する処理
日付の処理の実装
MySQLでとある月から〇ヶ月後のデータを取得するなどを行ったので手順書等を記載いたします。
1.DATE_FORMAT
日付データから特定の数値だけ必要な時はDATE_FORMATを使います。 例えばフィールド[birthday]に[1994-05-23]という形式で誕生日のデータが入っていて 年と月の情報だけが欲しい場合以下のように記述することで 年と月のデータを取得できます。
(DATE_FORMAT(birthday,'%Y%m')
これで先ほどのデータが [1994-05]となります。
例えばこれを結合条件で利用するとなると以下のようになります。
(DATE_FORMAT(hoges.day,'%Y%m') = (DATE_FORMAT(customers.birthday,'%Y%m')
まあ誕生日を結合条件にすることがあるかは疑問ですが、、、
2.DATE_ADD
とある日付のデータがあり、その〇日後や〇ヶ月後のデータを取得したいときにDATE_ADDを使用します。 先ほどと同じように、フィールド[purchase_date]に[2017-06-01]という形式で購入日データが入っているとします 使い方は以下のようになります。
・3日後を取得したい。
DATE_ADD(purchase_date, INTERVAL 3 DAY)
DAYで日にち計算をします。 データは[2017-06-04]になります。
・5ヶ月前を取得したい
DATE_ADD(purchase_date, INTERVAL -5 MONTH)
MONTHで月計算をします。 データは[2017-01-01]になります
・来月を取得したい
DATE_ADD(LAST_DAY(CURDATE()),INTERVAL 1 DAY)
LAST_DAYで月末の日付を取得できます CURDATE()で現在の年月日を(0000-00-00)の形式で取得できます 1 DAYで次の日なので翌月のデータを取得できます。
.3 DATE_FORMAT と DATE_ADD の組合せ
さて続いては2ヶ月後のデータで月だけを取得したい時の処理を記載いたします。
DATE_FORMAT(DATE_ADD(purchase_date , INTERVAL 2 MONTH),'%m')
DATE_ADDはデータが[0000-00-00]の形式である必要があるらしく、まず先に2ヶ月後のデータを取得してそのデータを DATE_FRMATで月のデータのみにいたします。
・来月の月のデータだけを取得するには以下のようになります。
DATE_FORMAT( DATE_ADD(LAST_DAY(CURDATE()),INTERVAL 1 DAY) , '%m')
来月が誕生日の人のデータをとるときなどに使えます。
それでは