【发布时间】:2021-09-16 15:02:12
【问题描述】:
假设您有一段时间的一组记录,例如一个月内生产的产品。
现在您想知道在周三和周五的 22 点到 3 点生产了多少这些产品。
要获取所有产品,我们假设查询如下所示:
SELECT count(id)
FROM products
WHERE timestamp BETWEEN to_timestamp($startOfMonth) AND to_timestamp($endOfMonth)
其中 $startOfMonth 和 $endOfMonth 是某些整数时间戳的占位符值。
要获取某个时间的产品,我们可以使用“BETWEEN TIME”并将其添加到查询中:
SELECT count(id)
FROM products
WHERE timestamp BETWEEN to_timestamp($startOfMonth) AND to_timestamp($endOfMonth)
AND CAST(timestamp AS time) BETWEEN TIME '3:00' AND TIME '22:00'
接下来我们要做的是添加我们想要查询的独家日期:
SELECT count(id)
FROM products
WHERE timestamp BETWEEN to_timestamp($startOfMonth) AND to_timestamp($endOfMonth)
AND CAST(timestamp AS time) BETWEEN TIME '3:00' AND TIME '22:00'
AND EXTRACT(dow FROM timestamp) IN (3,5)
一切正常。
但现在我想查询一个与一天重叠的时间:
SELECT count(id)
FROM products
WHERE timestamp BETWEEN to_timestamp($startOfMonth) AND to_timestamp($endOfMonth)
AND CAST(timestamp AS time) BETWEEN TIME '22:00' AND TIME '12:00'
AND EXTRACT(dow FROM timestamp) IN (3,5)
我没有收到任何结果。
如果开始时间与结束时间不同,如何运行此查询?
谢谢你;-)
【问题讨论】:
标签: postgresql time overlapping days hour