Udtræksfunktionen virker nyttig, og datofunktionen jeg har fundet løser nogle af mine problemer, men er der nogen måde at replikere PostgreSQL's date_trunc?
Faktisk EXTRACT
ser ud til, at det vil være det tætteste match for denne specifikke sag.
Din originale kode i PG:
WHERE date_trunc('month', QUERY_DATE) BETWEEN
date_trunc('month', now()) - INTERVAL '4 MONTH' AND
date_trunc('month', now() - INTERVAL '1 WEEK')
Brug af 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)
Selvom det burde være funktionelt identisk, er dette faktisk at mangle datoerne til en ÅÅÅÅMM-streng, før sammenligningen udføres.
En anden mulighed ville være at bruge DATE_FORMAT
for at genopbygge datostrengen og tvinge den til begyndelsen af måneden:
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')
Vær også opmærksom på, at MySQL er virkelig dårlig til at håndtere datointervaller, selv når feltet er indekseret. Du vil sandsynligvis ende med en fuld bordscanning, hvis du ikke er forsigtig.