微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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在处理日期范围方面真的很差,即使在字段被索引时也是如此.如果您不小心,您可能会完成全表扫描.

原文地址:https://www.jb51.cc/postgresql/192201.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐