如何在PostgreSQL中过滤含秒/亚秒的timestamp with timezone记录
解决方案
方法1:匹配15分钟区间起始时刻
你的表存储的是15分钟OHLC数据,合法记录的dt应该是每个15分钟区间的起始时间点(秒、亚秒均为0)。可以用DATE_TRUNC将时间截断到15分钟粒度,判断截断后的时间是否与原dt完全相等:
SELECT * FROM stock_price_15m WHERE DATE_TRUNC('15 minutes', dt) = dt -- 可追加其他筛选条件 AND date(dt) = '2022-12-22' AND stock_id = 7 ORDER BY dt;
这个方法直接验证dt是否为15分钟整点起始时间,自动过滤所有带秒/亚秒偏移的记录。
方法2:直接检查秒和亚秒是否为0
如果仅需过滤含秒/亚秒的记录(不严格限制15分钟间隔),可以用EXTRACT提取时间的秒和微秒部分,判断是否均为0:
SELECT * FROM stock_price_15m WHERE EXTRACT(SECOND FROM dt) = 0 AND EXTRACT(MICROSECOND FROM dt) = 0 AND date(dt) = '2022-12-22' AND stock_id = 7 ORDER BY dt;
关于to_char失效的原因
如果之前用to_char尝试过滤却失败,大概率是没考虑时区影响,或是格式字符串未覆盖亚秒部分——即使to_char不显示亚秒,原时间的亚秒数据依然存在,导致匹配逻辑失效。上面两种方法直接操作时间字段的数值属性,可靠性更高。
内容的提问来源于stack exchange,提问作者Sandeep Kulkarni
相关产品推荐
相关产品推荐

