わかりやすく解説!MySQLで2つの日付の間のデータを抽出する方法
MySQLで2つの日付の間のデータを抽出するには、主に2つの方法があります。
- BETWEEN演算子を使用する
- DATE_SUB() と DATE_ADD() 関数を使用する
BETWEEN演算子は、指定した範囲内の値を抽出するために使用されます。
例:
SELECT * FROM テーブル名
WHERE 列名 BETWEEN '開始日付' AND '終了日付';
2024年3月10日から2024年3月20日までのデータを抽出したい場合は、以下のクエリを使用します。
SELECT * FROM 注文
WHERE 注文日 BETWEEN '2024-03-10' AND '2024-03-20';
DATE_SUB() と DATE_ADD() 関数は、日付から指定された日数を加減算するために使用されます。
SELECT * FROM テーブル名
WHERE 列名 >= DATE_SUB('開始日付', INTERVAL 日数 DAY)
AND 列名 <= DATE_ADD('終了日付', INTERVAL 日数 DAY);
SELECT * FROM 注文
WHERE 注文日 >= DATE_SUB('2024-03-10', INTERVAL 0 DAY)
AND 注文日 <= DATE_ADD('2024-03-20', INTERVAL 0 DAY);
その他の注意点:
- 上記の例では、日付のフォーマットは 'YYYY-MM-DD' としています。ご自身の環境に合わせてフォーマットを変更してください。
- BETWEEN演算子は、範囲内の境界値を含むデータのみ抽出します。境界値を含まないデータも抽出したい場合は、DATE_SUB() と DATE_ADD() 関数を使用する必要があります。
- 複合的な条件で抽出したい場合は、WHERE句に複数の条件を記述することができます。
-- テーブル orders から、2024年3月10日から2024年3月20日までの注文データを取得する
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-03-10' AND '2024-03-20';
-- テーブル orders から、2024年3月10日から2024年3月20日までの注文データを取得する
SELECT *
FROM orders
WHERE order_date >= DATE_SUB('2024-03-10', INTERVAL 0 DAY)
AND order_date <= DATE_ADD('2024-03-20', INTERVAL 0 DAY);
複合的な条件で抽出する例
-- テーブル orders から、2024年3月10日から2024年3月20日までの注文データのうち、
-- 注文金額が1000円以上のものを取得する
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-03-10' AND '2024-03-20'
AND order_amount >= 1000;
- 特定の曜日を含むデータを取得する
これらの例は、ご自身のニーズに合わせて変更することができます。
2つの日付の間のデータを抽出する他の方法
CASE式は、列の値に基づいて異なる値を返す式です。
SELECT *
FROM orders
WHERE CASE
WHEN order_date BETWEEN '2024-03-10' AND '2024-03-20' THEN '期間内'
ELSE '期間外'
END AS 期間;
SUBSTRING() 関数は、文字列から部分文字列を抽出するために使用されます。
SELECT *
FROM orders
WHERE SUBSTRING(order_date, 1, 10) BETWEEN '2024-03-10' AND '2024-03-20';
GROUP BY句は、列の値に基づいてデータをグループ化するために使用されます。
SELECT COUNT(*) AS 件数, order_date
FROM orders
WHERE order_date BETWEEN '2024-03-10' AND '2024-03-20'
GROUP BY order_date;
HAVING句を使用する
HAVING句は、GROUP BY句でグループ化したデータに対して条件を指定するために使用されます。
SELECT COUNT(*) AS 件数, order_date
FROM orders
WHERE order_date BETWEEN '2024-03-10' AND '2024-03-20'
GROUP BY order_date
HAVING COUNT(*) > 10;
これらの方法は、それぞれ異なる利点と欠点があります。ご自身のニーズに合わせて最適な方法を選択してください。
mysql sql