提取函数似乎很有用,我发现的日期函数解决了我的一些问题,但是有没有办法复制PostgreSQL的date_trunc?
确实,
EXTRACT看起来这将是此特定情况下最接近的匹配项。
您在PG中的原始代码:
WHERe date_trunc('month', QUERY_DATE) BETWEEN date_trunc('month', now()) - INTERVAL '4 MONTH' AND 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在处理日期范围方面也确实很差。如果您不小心的话,最终可能会进行全表扫描。



