情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

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')

来月が誕生日の人のデータをとるときなどに使えます。

それでは