在 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中文网其他相关文章!