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。