MySQLでdatetime型データの〇日後を取得する方法(DATEDIFF)
2022/10/04
MySQLでdatetime型データがあり、何日経過しているかを取得し、〇日経過していた場合は何らかの処理を行いたい。また〇日部分は固定ではなく変動することがある。具体例としてデータ登録7日後にフラグを変更する、というような処理を行いたい。以下に対応方法をメモ。
DATEDIFF関数を使う
mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); -> 1 mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31'); -> -31
注意点として日付部分のみ計算され、時間部分は計算されない。例えば現在「2022-09-25 12:00:00」だったとした場合「2022-09-24 00:00:00」「2022-09-24 23:59:59」どちらも1日後として計算される。厳密に24時間経過したものを1日としてカウントする訳ではない点に注意。その他詳細はリファレンスページを参考。
具体例のソースコード
SELECT *, DATEDIFF( CURRENT_DATE(), regist_date ) AS target_date FROM test_table WHERE DATEDIFF( CURRENT_DATE(), regist_date ) >= 7
上記はregist_dateが7日経過したデータを抽出するSQL文になる。あとはCRONで適宜実行してその後の処理を行う。
所感
今まで〇日後部分は固定というケースのみだったのでデータ登録の際に〇日後の日時を登録しておき、毎日CRONでチェックするような形を取っていた。今回は変動するというケースだったのでPHP・MySQLのどっちで処理すればよいのか迷った。MySQLで簡潔に対応できているので合ってると思いたいところ。
関連記事
-
-
SQLで同じ値を複数のレコードに対してUPDATE
やりたかった事は、複数のレコードに対して 同じ値に更新したいというもの。 $sq ...
-
-
MySQLで「server has gone~」というエラーの対応方法
MySQLで「MySQL server has gone away」というエラー ...
-
-
MySQLで「doesn't have a default value」エラーの対処
MySQLでINSERT時に「Field 'カラム名' doesn't have ...
-
-
MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法
MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...
-
-
MySQLのview(ビュー)で仮想的なテーブルを作成する方法
MySQL関連のサイトを見ているとview(ビュー)が云々という記事を見かけた。 ...