date范围之间的PostgreSQL查询
我想查询我的postgresql数据库返回结果的date是在某些月份和年份。 换句话说,我希望一个月的所有价值。
到目前为止,我能做到的唯一方法就是这样:
SELECT user_id FROM user_logs WHERE login_date BETWEEN '2014-02-01' AND '2014-02-28'
问题是我必须在查询表之前计算第一个date和最后一个date。 有一个更简单的方法来做到这一点?
谢谢
使用date(和时间),如果使用>= start AND < end
许多事情会变得更简单。
例如:
SELECT user_id FROM user_logs WHERE login_date >= '2014-02-01' AND login_date < '2014-03-01'
在这种情况下,您仍然需要计算所需月份的开始date,但是这应该以任何方式简单明了。
结束date也简化了; 刚刚添加一个月。 不要和第28,30,31等混淆
这种结构还具有能够维持索引使用的优点。
很多人可能会build议如下forms,但是他们不使用索引:
WHERE DATEPART('year', login_date) = 2014 AND DATEPART('month', login_date) = 2
这包括计算表(扫描)中每一行的条件,而不是使用索引来查找匹配行的范围(范围search)。
阅读文档。
http://www.postgresql.org/docs/9.1/static/functions-datetime.html
我用这样的一个查询:
WHERE ( date_trunc('day',table1.date_eval) = '2015-02-09' )
要么
WHERE(date_trunc('day',table1.date_eval) >='2015-02-09'AND date_trunc('day',table1.date_eval) <'2015-02-09')
Juanitos Ingenier。