Funkce extraktu se zdá užitečná a funkce data, kterou jsem našel, řeší některé mé problémy, ale existuje nějaký způsob, jak replikovat date_trunc PostgreSQL?
Opravdu, EXTRACT
vypadá to, že to bude pro tento konkrétní případ nejbližší.
Váš původní kód v PG:
WHERE date_trunc('month', QUERY_DATE) BETWEEN
date_trunc('month', now()) - INTERVAL '4 MONTH' AND
date_trunc('month', now() - INTERVAL '1 WEEK')
Pomocí 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)
I když by to mělo být funkčně identické, ve skutečnosti se data před provedením porovnání mění do řetězce RRRRMM.
Další možností by bylo použití DATE_FORMAT
znovu sestavit řetězec data a vynutit jej na začátek měsíce:
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')
Uvědomte si také, že MySQL se opravdu špatně vypořádává s rozsahy dat, i když je pole indexováno. Pokud nebudete opatrní, pravděpodobně skončíte s úplným skenováním tabulky.