sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL's date_trunc i mySQL

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.



  1. Mysql:Vælg alle data mellem to datoer

  2. Sådan vælger du den første række i hver gruppe efter gruppe

  3. Fejl:Kan ikke oprette TypedQuery for forespørgsel med mere end én returnering

  4. MariaDB dato- og tidsenheder