PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

date_trunc de PostgreSQL dans mySQL

La fonction d'extraction semble utile et la fonction de date que j'ai trouvée résout certains de mes problèmes, mais existe-t-il un moyen de répliquer le date_trunc de PostgreSQL ?

En effet, EXTRACT il semble que ce sera la correspondance la plus proche pour ce cas spécifique.

Votre code d'origine dans PG :

WHERE date_trunc('month', QUERY_DATE) BETWEEN 
    date_trunc('month', now()) - INTERVAL '4 MONTH' AND 
    date_trunc('month', now() - INTERVAL '1 WEEK')

Utilisation de 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)

Bien qu'il devrait être fonctionnellement identique, il s'agit en fait de transformer les dates en une chaîne AAAAMM avant de faire la comparaison.

Une autre option serait d'utiliser DATE_FORMAT pour reconstruire la chaîne de date et la forcer au début du mois :

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

De plus, sachez que MySQL est vraiment médiocre pour gérer les plages de dates, même lorsque le champ est indexé. Vous allez probablement vous retrouver avec une analyse complète de la table si vous ne faites pas attention.