PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

date_trunc von PostgreSQL in mySQL

Die Extract-Funktion scheint nützlich zu sein und die Date-Funktion, die ich gefunden habe, löst einige meiner Probleme, aber gibt es eine Möglichkeit, date_trunc von PostgreSQL zu replizieren?

In der Tat EXTRACT sieht so aus, als wäre es die beste Übereinstimmung für diesen speziellen Fall.

Ihr ursprünglicher 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')

Mit 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)

Obwohl es funktional identisch sein sollte, werden die Daten tatsächlich in eine YYYYMM-Zeichenfolge zerlegt, bevor der Vergleich durchgeführt wird.

Eine andere Möglichkeit wäre die Verwendung von DATE_FORMAT um die Datumszeichenfolge neu zu erstellen und sie auf den Anfang des Monats zu zwingen:

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')

Beachten Sie auch, dass MySQL sehr schlecht mit Datumsbereichen umgehen kann, selbst wenn das Feld indiziert ist. Sie werden wahrscheinlich mit einem vollständigen Tabellenscan enden, wenn Sie nicht aufpassen.