PostgreSQL 中日期範圍之間的查詢
Shihab Sikder
2023年1月30日
2022年5月14日
- PostgreSQL 中的日期範圍
- PostgreSQL 中使用日期的間隔和差異查詢日期範圍
-
在 PostgreSQL 中使用
between
查詢日期範圍 -
在 PostgreSQL 中使用
daterange
型別查詢日期範圍
本文將討論不同型別的範圍來比較 PostgreSQL 中的日期。
PostgreSQL 中的日期範圍
預設情況下,PostgreSQL 提供了一些範圍來比較這些值。特別是,我們可以使用 daterange
和 between
來比較日期。
為了演示,讓我們建立一個表並用一些資料填充它。
CREATE TABLE logger(
id SERIAL PRIMARY KEY,
name VARCHAR (255) NOT NULL,
login_date DATE NOT NULL DEFAULT CURRENT_DATE
);
輸出:
postgres=# select * from logger;
id | name | login_date
----+-------+------------
1 | Jhon | 2020-06-06
2 | Alice | 2022-06-06
3 | Bon | 2021-06-06
4 | Trude | 2020-02-02
5 | Jene | 2022-02-22
6 | Dan | 2022-01-20
(6 rows)
PostgreSQL 中使用日期的間隔和差異查詢日期範圍
假設你想要登入到資料庫的人的所有姓名(帶有 id)以及他們到今天為止的天數。你只想檢視過去 120 天內登入的使用者。
示例程式碼:
SELECT id, name, now() - login_date as time_spent from logger
WHERE login_date> (CURRENT_DATE - INTERVAL '120 days');
在這裡,你可以在間隔中輸入小時、天、月和年。
輸出:
id | name | time_spent
----+------+-------------------------
5 | Jene | 21 days 11:44:35.790685
6 | Dan | 54 days 11:44:35.790685
(2 rows)
在 PostgreSQL 中使用 between
查詢日期範圍
你可以執行下面的 SQL 命令來檢視誰在 2021 年和當前日期之間登入。
postgres-# WHERE login_date between '2021-01-01' AND CURRENT_DATE;
id | name | login_date
----+------+------------
3 | Bon | 2021-06-06
5 | Jene | 2022-02-22
6 | Dan | 2022-01-20
(3 rows)
這裡日期資料型別的格式是 YYYY-MM-DD。因此,當你嘗試插入或編寫查詢時,請確保使用 PostgreSQL 資料庫支援的格式。
這裡是 PostgreSQL 中日期資料型別格式的文件。
在 PostgreSQL 中使用 daterange
型別查詢日期範圍
現在,假設你想檢視在日期範圍(例如 2021-06-06 到 2022-03-10)之間登入的使用者。讓我們建立查詢。
SELECT *
FROM logger
WHERE '[2021-06-06, 2022-03-10]'::daterange @> login_date;
在這裡,我們使用::daterange
,這意味著我們將範圍型別轉換為日期資料型別。 @>
稱為範圍運算子,也可用於其他不同資料型別的範圍查詢。
輸出:
postgres-# WHERE '[2021-06-06, 2022-03-10]'::daterange @> login_date;
id | name | login_date
----+------+------------
3 | Bon | 2021-06-06
5 | Jene | 2022-02-22
6 | Dan | 2022-01-20
(3 rows)
此外,你也可以在範圍內使用 CURRENT_DATE
。請記住,在方括號內,第一個是開始日期,第二個是範圍的結束日期。
對於結束日期,你也可以寫 infinity
。你可以訪問網站此處瞭解有關日期範圍的更多資訊。
Author: Shihab Sikder