BETWEEN演算子とDATEADD関数で2つの日付間の日付を選択する
SQLクエリで2つの日付間の日付を選択するには、いくつかの方法があります。ここでは、最も一般的な方法である BETWEEN
演算子と DATEADD
関数を使った方法を紹介します。
BETWEEN演算子を使う方法
BETWEEN
演算子は、指定された範囲内の値を選択するために使用されます。2つの日付間の日付を選択するには、次の構文を使用します。
SELECT *
FROM table_name
WHERE date_column BETWEEN start_date AND end_date;
例
orders
テーブルに order_date
という列があるとします。2023年1月1日から2023年3月31日までの注文をすべて選択するには、次のクエリを使用します。
SELECT *
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-03-31';
DATEADD関数を使う方法
SELECT *
FROM table_name
WHERE date_column >= DATEADD(start_date, INTERVAL 1 DAY)
AND date_column <= DATEADD(end_date, INTERVAL -1 DAY);
SELECT *
FROM orders
WHERE order_date >= DATEADD('2023-01-01', INTERVAL 1 DAY)
AND order_date <= DATEADD('2023-03-31', INTERVAL -1 DAY);
上記の方法以外にも、2つの日付間の日付を選択するには、いくつかの方法があります。
>=
および<=
演算子を使用するSUBSTR
関数を使用して日付文字列の一部を抽出する- 暦テーブルを使用する
補足
- 上記の例では、
*
を使用してすべての列を選択しています。特定の列のみを選択するには、列名をカンマで区切って指定します。 - WHERE 句は、条件を指定するために使用されます。上記の例では、
order_date
列が指定された範囲内にあるという条件を指定しています。 - 上記のクエリは、
order_date
列が日付型であることを前提としています。日付型ではない場合は、適切な変換関数を使用して日付型に変換する必要があります。
テーブル
CREATE TABLE orders (
order_id INT,
order_date DATE,
customer_name VARCHAR(50),
product_name VARCHAR(50),
quantity INT,
price DECIMAL(10,2)
);
データ
INSERT INTO orders (order_date, customer_name, product_name, quantity, price)
VALUES
('2023-01-01', 'John Doe', 'Product A', 1, 100),
('2023-01-02', 'Jane Doe', 'Product B', 2, 200),
('2023-01-03', 'John Doe', 'Product C', 3, 300),
('2023-02-01', 'Jane Doe', 'Product A', 1, 100),
('2023-02-02', 'John Doe', 'Product B', 2, 200),
('2023-02-03', 'Jane Doe', 'Product C', 3, 300),
('2023-03-01', 'John Doe', 'Product A', 1, 100),
('2023-03-02', 'Jane Doe', 'Product B', 2, 200),
('2023-03-03', 'John Doe', 'Product C', 3, 300);
SELECT *
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-03-31';
結果
order_id | order_date | customer_name | product_name | quantity | price
------- | -------- | -------- | -------- | -------- | --------
1 | 2023-01-01 | John Doe | Product A | 1 | 100.00
2 | 2023-01-02 | Jane Doe | Product B | 2 | 200.00
3 | 2023-01-03 | John Doe | Product C | 3 | 300.00
... | ... | ... | ... | ... | ...
SELECT *
FROM orders
WHERE order_date >= DATEADD('2023-01-01', INTERVAL 1 DAY)
AND order_date <= DATEADD('2023-03-31', INTERVAL -1 DAY);
order_id | order_date | customer_name | product_name | quantity | price
------- | -------- | -------- | -------- | -------- | --------
2 | 2023-01-02 | Jane Doe | Product B | 2 | 200.00
3 | 2023-01-03 | John Doe | Product C | 3 | 300.00
... | ... | ... | ... | ... | ...
8 | 2023-03-02 | Jane Doe | Product B | 2 | 200.00
9 | 2023-03-03 | John Doe | Product C | 3 | 300.00
2つの日付間の日付を選択する他の方法
BETWEEN
演算子の代わりに、>=
および <=
演算子を使って2つの日付間の日付を選択することができます。
SELECT *
FROM orders
WHERE order_date >= '2023-01-01'
AND order_date <= '2023-03-31';
日付列が文字列型の場合、SUBSTR
関数を使用して日付文字列の一部を抽出することができます。例えば、以下のクエリは、order_date
列の最初の10文字を使用して、2023年1月1日から2023年3月31日までの注文を選択します。
SELECT *
FROM orders
WHERE SUBSTR(order_date, 1, 10) BETWEEN '2023-01-01' AND '2023-03-31';
暦テーブルがあれば、そのテーブルを使用して2つの日付間の日付を選択することができます。
SELECT *
FROM orders
INNER JOIN calendar ON orders.order_date = calendar.date
WHERE calendar.date BETWEEN '2023-01-01' AND '2023-03-31';
- BETWEEN 演算子は、最もシンプルで使いやすい方法です。
-
- SUBSTR 関数は、日付列が文字列型の場合にのみ使用できます。
- 暦テーブルを使用する方法は、最も複雑ですが、最も柔軟性があります。
注意事項
- 上記のクエリは、すべての日付を選択するものです。特定の日付のみを選択するには、WHERE 句に additional conditions を追加する必要があります。
sql sql-server t-sql