日期範圍之間的 PostgreSQL 查詢
Shihab Sikder
2023年1月30日
2022年5月14日
- PostgreSQL 中的範圍型別
-
在 Postgres 中使用
INTERVAL
和日期型別的差異 -
在 Postgres 的日期型別中使用
between
-
在 Postgres 的日期型別中使用
daterange
我們將在本文中討論 PostgreSQL 中不同型別的範圍。
PostgreSQL 中的範圍型別
預設情況下,Postgres 提供了一些範圍來比較這些值。
Postgres 中有一個 daterange
型別來比較日期。此外,我們可以使用 between
來比較日期。
為了演示,讓我們建立一個表並用一些資料填充它。
架構 SQL:
CREATE TABLE logger(
id SERIAL PRIMARY KEY,
name VARCHAR (255) NOT NULL,
login_date DATE NOT NULL DEFAULT CURRENT_DATE
);
填充表後,執行此 Postgres Query SQL。
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)
在 Postgres 中使用 INTERVAL
和日期型別的差異
假設你想要所有姓名以及 id
、誰登入資料庫以及到目前為止花費了多少天,並且你只想檢視最近 120 天登入的人。
查詢 SQL:
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)
在 Postgres 的日期型別中使用 between
如果你想檢視誰在 2021 年和當前日期之間登入,可以執行以下 SQL 命令。
查詢 SQL:
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
。因此,當你嘗試插入或編寫查詢時,請確保使用 Postgres 資料庫支援的格式。
這裡是 Postgres 中日期資料型別格式的文件。
在 Postgres 的日期型別中使用 daterange
假設你想檢視在日期範圍之間登入的使用者。例如,2021 年 6 月 6 日至 2022 年 3 月 10 日。
執行以下 SQL 命令:
查詢 SQL:
SELECT *
FROM logger
WHERE '[2021-06-06, 2022-03-10]'::daterange @> login_date;
我們使用了::daterange
,這意味著我們將範圍型別轉換為日期資料型別。 @>
稱為範圍運算子,它也可以用於不同資料型別的其他範圍查詢。
輸出:
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