首页 >数据库 >mysql教程 >如何在 PostgreSQL 中高效查找重叠的日期范围?

如何在 PostgreSQL 中高效查找重叠的日期范围?

Susan Sarandon
Susan Sarandon原创
2025-01-05 10:41:40714浏览

How Can I Efficiently Find Overlapping Date Ranges in PostgreSQL?

在 PostgreSQL 中查找重叠的日期范围

在 PostgreSQL 中处理日期范围时,识别重叠是一项关键任务。提供的查询尝试查找特定年份期间在球队中的球员,但包含错误。

提供的查询存在问题

查询包含 BETWEEN 条件 ( DATE_PART('YEAR',date_join) >= ? AND DATE_PART('YEAR',date_leave)

更正的查询

正确查找重叠范围,我们需要调整条件以排除上限:

SELECT * 
FROM   contract 
JOIN   team USING (name_team) 
JOIN   player USING(name_player) 
WHERE  name_team = ? 
AND    DATE_PART('YEAR',date_join) >= ? 
AND    DATE_PART('YEAR',date_leave) < ?

使用范围的替代解决方案类型

PostgreSQL 版本 9.2 及更高版本提供对范围类型的支持。这是一个利用范围类型和 &&& 运算符来查找重叠范围的查询:

SELECT DISTINCT name_player 
FROM   contract
WHERE  name_team = ? 
AND    daterange(date_join, date_leave) &&&
       daterange '[2009-01-01,2010-01-01)'

此查询利用重叠运算符 &&& 和专门定义的范围类型来查找重叠的日期范围,而不需要显式边界检查。

以上是如何在 PostgreSQL 中高效查找重叠的日期范围?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn