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