sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL's date_trunc in mySQL

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.



  1. Voeg de tweede kolomwaarde samen als de eerste kolomwaarde hetzelfde is

  2. EXCEPT-clausule gebruiken in PostgreSQL

  3. Knee-Jerk Performance Tuning:voeg gewoon een SSD toe

  4. Detecteren of de rij is bijgewerkt of ingevoegd