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。