sql - 查询日期范围postgresql

标签 sql postgresql date date-range

我有以下 postgresql 表;

ID  Date
 1  [2017-01-01,2051-01-01)
 2  [2017-01-01,2051-01-01)
 3  [2017-01-01,2051-01-01)
 4  [2017-01-01,2051-01-01)
 5  [2000-01-01,2017-01-01)
 6  [2000-01-01,2017-01-01)
 7  [2017-01-01,2051-01-01)
 8  [2017-01-01,2051-01-01)
 9  [2017-01-01,2051-01-01)
 10 [2017-01-01,2051-01-01)

如何在日期范围内进行查询,以便在 2003 年 6 月返回 ID 5 和 6。

最佳答案

使用包含运算符 <@ :

with my_table(id, dates) as (
values
    (1, '[2017-01-01,2051-01-01)'::daterange),
    (2, '[2017-01-01,2051-01-01)'),
    (3, '[2017-01-01,2051-01-01)'),
    (4, '[2017-01-01,2051-01-01)'),
    (5, '[2000-01-01,2017-01-01)'),
    (6, '[2000-01-01,2017-01-01)'),
    (7, '[2017-01-01,2051-01-01)'),
    (8, '[2017-01-01,2051-01-01)'),
    (9, '[2017-01-01,2051-01-01)'),
    (10, '[2017-01-01,2051-01-01)')
)

select *
from my_table
where '2003-06-01'::date <@ dates;

 id |          dates          
----+-------------------------
  5 | [2000-01-01,2017-01-01)
  6 | [2000-01-01,2017-01-01)
(2 rows)    

了解 Range Functions and Operators.


您还可以检查 dates: 是否包含日期范围(不是单个日期)

where daterange('2003-01-01', '2003-12-31') <@ dates;

或者日期范围是否重叠 dates:

where daterange('2003-01-01', '2003-12-31') && dates;

关于sql - 查询日期范围postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423501/

相关文章:

sql - MySQL 查找没有帖子的作者(一对多关系)

MYSQL 在 'LIKE' 子句中使用 'WHERE' 在子查询中搜索

mysql - mysql中的日期排序

php - 我想将文本和日期等数据从 HTML FORM 插入 PHP 到 MYSQL 数据库

sql - Mysql语法帮助

用于选择唯一值组合的 SQL 查询,忽略两列顺序

sql - 使用 postgresql 中另一个表的条件更新列

postgresql - postgresql 中的服务器不匹配错误

SQL:如何形成查询以结合查找?

sql - 对于仅包含年份的列,我应该使用什么类型?