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

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...