DATE_ADD()関数で日付範囲を操作する
SQLとMySQLにおける日付範囲の比較
BETWEEN演算子
BETWEEN演算子は、指定された範囲内の日付かどうかを比較するために使用されます。
SELECT * FROM テーブル名
WHERE 列名 BETWEEN '開始日付' AND '終了日付';
例:
SELECT * FROM 注文
WHERE 注文日 BETWEEN '2024-01-01' AND '2024-03-31';
このクエリは、2024年1月1日から2024年3月31日までの間に注文されたすべての注文を返します。
比較演算子
比較演算子 (<, >, <=, >=, =, !=)を使用して、日付を直接比較することもできます。
SELECT * FROM テーブル名
WHERE 列名 < '比較対象の日付';
SELECT * FROM 従業員
WHERE 生年月日 < '1980-01-01';
このクエリは、1980年1月1日より前に生まれたすべての従業員を返します。
DATE_ADD()関数
DATE_ADD()関数は、指定された日付に日数、月数、年数を加算または減算するために使用できます。
SELECT * FROM テーブル名
WHERE 列名 BETWEEN DATE_ADD('開始日付', INTERVAL '加算/減算する日数' DAY) AND DATE_ADD('終了日付', INTERVAL '加算/減算する日数' DAY);
SELECT * FROM 契約
WHERE 開始日 BETWEEN DATE_ADD('2024-01-01', INTERVAL 1 MONTH) AND DATE_ADD('2024-01-01', INTERVAL 3 MONTH);
このクエリは、2024年1月1日から3ヶ月間有効な契約をすべて返します。
SELECT * FROM テーブル名
WHERE 列名 BETWEEN DATE_SUB('開始日付', INTERVAL '加算/減算する日数' DAY) AND DATE_SUB('終了日付', INTERVAL '加算/減算する日数' DAY);
SELECT * FROM イベント
WHERE 開催日 BETWEEN DATE_SUB('2024-12-31', INTERVAL 1 WEEK) AND '2024-12-31';
このクエリは、2024年12月31日の1週間前から当日までのすべてのイベントを返します。
- 上記の例は、すべてMySQL 8.0を使用しています。他のバージョンのMySQLでは、構文が異なる場合があります。
- 比較演算子は、日付だけでなく、時間、タイムスタンプなども比較できます。
SELECT * FROM 注文
WHERE 注文日 BETWEEN '2024-01-01' AND '2024-03-31';
SELECT * FROM 従業員
WHERE 生年月日 < '1980-01-01';
SELECT * FROM 契約
WHERE 開始日 BETWEEN DATE_ADD('2024-01-01', INTERVAL 1 MONTH) AND DATE_ADD('2024-01-01', INTERVAL 3 MONTH);
SELECT * FROM イベント
WHERE 開催日 BETWEEN DATE_SUB('2024-12-31', INTERVAL 1 WEEK) AND '2024-12-31';
# 年齢を取得する
SELECT YEAR(CURDATE()) - YEAR(生年月日) AS 年齢 FROM 従業員;
# 2ヶ月後の日付を取得する
SELECT DATE_ADD(CURDATE(), INTERVAL 2 MONTH);
# 1週間前の日付を取得する
SELECT DATE_SUB(CURDATE(), INTERVAL 1 WEEK);
CASE式を使用して、日付範囲を個別に比較することができます。
SELECT * FROM テーブル名
WHERE CASE
WHEN 列名 BETWEEN '開始日付' AND '終了日付' THEN '範囲内'
ELSE '範囲外'
END;
SELECT * FROM 契約
WHERE CASE
WHEN 開始日 BETWEEN '2024-01-01' AND '2024-03-31' THEN '有効'
ELSE '無効'
END;
サブクエリ
SELECT * FROM テーブル名
WHERE 列名 IN (
SELECT 列名 FROM テーブル名
WHERE 列名 BETWEEN '開始日付' AND '終了日付'
);
SELECT * FROM 注文
WHERE 注文ID IN (
SELECT 注文ID FROM 注文
WHERE 注文日 BETWEEN '2024-01-01' AND '2024-03-31'
);
結合
SELECT * FROM テーブル名1
JOIN テーブル名2
ON テーブル名1.列名 = テーブル名2.列名
WHERE テーブル名2.列名 BETWEEN '開始日付' AND '終了日付';
SELECT * FROM 従業員
JOIN 契約
ON 従業員.従業員ID = 契約.従業員ID
WHERE 契約.開始日 BETWEEN '2024-01-01' AND '2024-03-31';
sql mysql date