De extract-functie lijkt nuttig en de date-functie die ik heb gevonden lost een aantal van mijn problemen op, maar is er een manier om PostgreSQL's date_trunc te repliceren?
Inderdaad, EXTRACT
het lijkt erop dat dit de beste match is voor dit specifieke geval.
Uw originele 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')
EXTRACT
gebruiken :
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)
Hoewel het functioneel identiek zou moeten zijn, is dit in feite het manipuleren van de datums in een YYYYMM-tekenreeks voordat de vergelijking wordt gemaakt.
Een andere optie is het gebruik van DATE_FORMAT
om de datumstring opnieuw op te bouwen en naar het begin van de maand te forceren:
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')
Houd er ook rekening mee dat MySQL erg slecht is in het omgaan met datumbereiken, zelfs wanneer het veld is geïndexeerd. Je krijgt waarschijnlijk een volledige tafelscan als je niet oppast.