概要
MySQLデータベースにて、2ヶ月前から1ヶ月前までのデータを削除するストアドプロシージャを作成しました。
本記事ではそのクエリの解説をします。
SQLクエリ
sample-db
データベース内のsample_table
というテーブルにて、2ヶ月前から1ヶ月前までのデータを削除するストプロを作成しました。プロシージャ名はDeleteProcedure
としたので、実行する際は、以下のように叩きます。
{ CALL sample-db.DeleteProcedure() }
プロシージャサンプルは以下の通りです。
CREATE PROCEDURE `sample-db`.`DeleteProcedure`()
BEGIN
DECLARE start_date DATETIME;
DECLARE end_date DATETIME;
-- 現在時刻を取得
SET @current_date = NOW();
-- 2ヶ月前の日を算出し、その日の0:00:00をstart_dateに代入
SET start_date = DATE_SUB(DATE_FORMAT(@current_date, '%Y-%m-%d 00:00:00'), INTERVAL 2 MONTH);
-- 1ヶ月前の日を算出し、その前日の23:59:59をend_dateに代入
SET end_date = DATE_SUB(DATE_FORMAT(@current_date, '%Y-%m-%d 00:00:00'), INTERVAL 1 MONTH);
SET end_date = DATE_SUB(end_date, INTERVAL 1 SECOND);
-- 削除クエリを実行
DELETE FROM sample-db.sample_table WHERE sample_table.create_date >= start_date AND sample_table.create_date < end_date;
END
備考
-
@
記号がついた変数は、MySQLにおいてユーザー定義変数を表すために使用されるプレフィックスです。セッションがアクティブな間、その値が保持されます。 -
INTERVAL
は、その後に続けて指定された数値と単位は、時間の間隔を表します。- 例えば、
INTERVAL 2 MONTH
は「2ヶ月」という時間間隔、INTERVAL 1 SECOND
は「1秒」という時間間隔。
- 例えば、
-
DATE_SUB
によって、上記INTERVAL
で指定した日付や時刻から一定の時間間隔を減算して、新しい日付や時刻を生成しています。基本構文は以下。
DATE_SUB(date, INTERVAL expr unit)
date
: 日付や時刻を減算したい元の日付や時刻を指定します。
expr
: 減算する時間間隔を数値で指定します。
unit
: exprの単位を指定します
-
DATE_FORMAT
は、日付や時刻の書式化(フォーマット変換)を行うためのSQL関数です。基本的な構文は以下。
DATE_FORMAT(date, format)
date
: 書式化したい日付や時刻を指定します。
format
: 日付や時刻の書式を指定する文字列
上記サンプルクエリのように'%Y-%m-%d 00:00:00'
とすれば、、常に時刻が00:00:00
になります。