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で簡潔に対応できているので合ってると思いたいところ。
関連記事
-
-
MySQLにて指定したカラムがNULLもしくは空の場合、あらかじめ決めておいた内容で表示する方法
何らかのフォームとMySQLを組み合わせた際に任意入力の項目はそのカラムがNUL ...
-
-
MySQLで苗字(姓)と名前(名)のカラムを結合させ検索する方法
MySQLで名字(姓)と名前(名)をそれぞれ別カラムに格納しているデータベースが ...
-
-
MySQLでphpMyAdminやAdminer上だけ文字化けする場合の対応方法
レンタルサーバーのプログラムでWebページ上では文字化けしていないのに、phpM ...
-
-
MySQLでテーブルのカラム名やカラムの型等、詳細情報を取得する方法
MySQLでテーブルのカラム名やカラムの型等、詳細情報を取得する方法をメモ。 & ...
-
-
MySQLで指定したカラムの最頻値を抽出する方法
MySQLで指定したカラムの最頻値(全データの中で最も多く出現する値)を抽出した ...