You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询包含当前年份的tsrange类型所有数据?

PostgreSQL tsrange 筛选包含指定年份的行

要筛选出time_range列与2024年有重叠的行,你需要用PostgreSQL范围类型的重叠操作符&&,它用来判断两个范围是否存在交集。

正确查询语句

SELECT time_range
FROM holidays
WHERE user_id = 1
AND time_range && tsrange('2024-01-01', '2025-01-01', '[)');

语句说明

  • tsrange('2024-01-01', '2025-01-01', '[)'):构造2024年的完整时间范围(左闭右开,包含2024年01月01日00:00:00到2024年12月31日23:59:59的所有时间)。
  • &&:重叠操作符,只要time_range和2024年的范围有任意交集,就会被选中。比如("2024-12-02", "2025-01-02")和2024年的范围在2024-12-02到2025-01-01之间有重叠,因此会被包含在结果中。

动态适配当前年份

如果需要自动适配当前年份,不用硬编码2024,可以用date_trunc函数动态生成范围:

SELECT time_range
FROM holidays
WHERE user_id = 1
AND time_range && tsrange(
  date_trunc('year', current_timestamp),
  date_trunc('year', current_timestamp) + interval '1 year',
  '[)'
);

原查询不生效的原因

你之前用的<@是包含于操作符,要求time_range完全被后面的范围包含,这会漏掉那些跨年份但和目标年份有重叠的行(比如你的例子中第二行),所以不符合需求。

内容的提问来源于stack exchange,提问作者serverz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:49:56