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で歯抜けになっているint型の数値を取得する
MySQLで歯抜けになっているシーケンス番号を 取得したいケースがあった。 ■ソ ...
-
-
MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法
先日PHPで画像を比較して類似度を算出する「image-comparator」ラ ...
-
-
MySQLで1対多というテーブル構造でデータ結合と条件検索する方法
MySQLで飲食店舗テーブルと休業日テーブルがあり、1店舗に対して複数行の休業日 ...
-
-
MySQLが起動も再起動もできない際の対応方法
サイトで障害が発生した。FTPやSSH接続は出来るけどサイト自体は表示されない。 ...
-
-
MySQLでパターンマッチの逆
LIKE検索の逆ってなったのでメモ。 NOT LIKE '%あああ%' が正解み ...