PostgreSQL的date_trunc在mySQL中

前端之家收集整理的这篇文章主要介绍了PostgreSQL的date_trunc在mySQL中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近,我已经熟悉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在处理日期范围方面真的很差,即使在字段被索引时也是如此.如果您不小心,您可能会完成全表扫描.

猜你在找的Postgre SQL相关文章