LoginSignup
0
0

【SQL】2ヶ月前から1ヶ月前までのデータを削除するストアドプロシージャ

Posted at

概要

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になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0