小编典典
提取函数似乎很有用,我发现的日期函数解决了我的一些问题,但是有没有办法复制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在处理日期范围方面也确实很差。如果您不小心的话,最终可能会进行全表扫描。
2020-05-17