最近,我已经熟悉Postgresql(使用8.2),并发现date_trunc函数在某些日/月/ etc之间轻松匹配时间戳非常有用.
我相信这个功能的真正有用性来自于它将输出保持为时间戳的格式.
我相信这个功能的真正有用性来自于它将输出保持为时间戳的格式.
我不得不切换到MysqL(5.0),并找到一些日期功能,而不是比较.提取函数似乎很有用,我发现的日期函数解决了我的一些问题,但是有没有办法复制Postgresql的date_trunc?
以下是我如何使用date_trunc将查询时间戳记与包括当前月份在内的最近4个月相匹配的示例,但只有当一个星期已经进入本月时,
WHERE date_trunc('month',QUERY_DATE) BETWEEN date_trunc('month',now()) - INTERVAL '4 MONTH' AND date_trunc('month',now() - INTERVAL '1 WEEK')
我不知道如何在MysqL中重新创建这样一个规定.所以,我的问题在一天结束时,是否可以通过尝试复制date_trunc(和如何)在MysqL中完成这种类型的查询,或者是否需要以不同的方式开始查看这些类型的查询,使其工作在MysqL(和如何做的建议)?
The extract function seems useful and the date function I have found solves some of my problems,but is there any way to replicate Postgresql’s date_trunc?
事实上,EXTRACT
看起来像是这个具体情况最接近的比赛.
您在PG中的原始代码:
WHERE date_trunc('month',now() - INTERVAL '1 WEEK')
使用EXTRACT:
WHERE EXTRACT(YEAR_MONTH FROM QUERY_DATE) BETWEEN EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 4 MONTH) AND EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 1 WEEK)
虽然它在功能上是相同的,但是在进行比较之前,这实际上会将日期变成YYYYMM字符串.
另一个选择是使用DATE_FORMAT
重建日期字符串并强制到月初:
WHERE DATE_FORMAT(QUERY_DATE,'%Y-%m-01') BETWEEN DATE_FORMAT(NOW() - INTERVAL 4 MONTH,'%Y-%m-01') AND DATE_FORMAT(NOW() - INTERVAL 1 WEEK,'%Y-%m-01')
另外,请注意,MysqL在处理日期范围方面真的很差,即使在字段被索引时也是如此.如果您不小心,您可能会完成全表扫描.