Die Extract-Funktion scheint nützlich zu sein und die Date-Funktion, die ich gefunden habe, löst einige meiner Probleme, aber gibt es eine Möglichkeit, date_trunc von PostgreSQL zu replizieren?
In der Tat EXTRACT
sieht so aus, als wäre es die beste Übereinstimmung für diesen speziellen Fall.
Ihr ursprünglicher Code in PG:
WHERE date_trunc('month', QUERY_DATE) BETWEEN
date_trunc('month', now()) - INTERVAL '4 MONTH' AND
date_trunc('month', now() - INTERVAL '1 WEEK')
Mit 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)
Obwohl es funktional identisch sein sollte, werden die Daten tatsächlich in eine YYYYMM-Zeichenfolge zerlegt, bevor der Vergleich durchgeführt wird.
Eine andere Möglichkeit wäre die Verwendung von DATE_FORMAT
um die Datumszeichenfolge neu zu erstellen und sie auf den Anfang des Monats zu zwingen:
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')
Beachten Sie auch, dass MySQL sehr schlecht mit Datumsbereichen umgehen kann, selbst wenn das Feld indiziert ist. Sie werden wahrscheinlich mit einem vollständigen Tabellenscan enden, wenn Sie nicht aufpassen.