Answers:
使用日期(和时间),如果使用,许多事情会变得更简单>= 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
这涉及计算表中每一行的条件(一次扫描),而不是使用索引来查找将匹配的行的范围(寻求范围)。
2014-12-01&2015-01-01。第二个也可以被索引,但是我承认这EXTRACT()并不容易- 看起来更兼容。
                    从PostreSQL 9.2开始,支持范围类型。所以你可以这样写:
SELECT user_id
FROM user_logs
WHERE '[2014-02-01, 2014-03-01]'::daterange @> login_date
这应该比字符串比较更有效
SELECT user_id 
FROM user_logs 
WHERE login_date BETWEEN '2014-02-01' AND '2014-03-01'
Between关键字在某个日期特别有效。假设日期时间为00:00:00(即午夜)。
阅读文档。
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。