我正在尝试查询我的 postgresql 数据库以返回日期在特定月份和年份的结果。换句话说,我想要一个月到一年的所有值。
到目前为止我能做到的唯一方法是这样的:
SELECT user_id
FROM user_logs
WHERE login_date BETWEEN '2014-02-01' AND '2014-02-28'
问题是我必须在查询表之前计算第一个日期和最后一个日期。有更简单的方法吗?
谢谢
最佳答案
有了日期(和时间),如果使用 >= start AND < end
,很多事情都会变得更简单.
例如:
SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'
在这种情况下,您仍然需要计算所需月份的开始日期,但这应该以多种方式直接进行。
结束日期也被简化了;刚好加上一个月。不要乱用第 28、30、31 等。
这种结构还有一个优点是可以保持索引的使用。
许多人可能会建议使用如下形式,但他们不使用索引:
WHERE
DATEPART('year', login_date) = 2014
AND DATEPART('month', login_date) = 2
这涉及计算表中每一行的条件(扫描)而不是使用索引来查找将匹配的行范围(范围查找)。
关于sql - 日期范围之间的 Postgresql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23335970/