日期範圍之間的 PostgreSQL 查詢

Shihab Sikder 2023年1月30日
  1. PostgreSQL 中的範圍型別
  2. 在 Postgres 中使用 INTERVAL 和日期型別的差異
  3. 在 Postgres 的日期型別中使用 between
  4. 在 Postgres 的日期型別中使用 daterange
日期範圍之間的 PostgreSQL 查詢

我們將在本文中討論 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。要了解有關日期範圍的更多資訊,你可以訪問以下網站此處

作者: Shihab Sikder
Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

相關文章 - PostgreSQL Date