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

Date_trunc di PostgreSQL in MySQL

La funzione di estrazione sembra utile e la funzione di data che ho trovato risolve alcuni dei miei problemi, ma c'è un modo per replicare date_trunc di PostgreSQL?

Infatti, EXTRACT sembra che sarà la corrispondenza più vicina per questo caso specifico.

Il tuo codice originale in PG:

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

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

Anche se dovrebbe essere funzionalmente identico, questo in realtà sta trasformando le date in una stringa AAAAMM prima di eseguire il confronto.

Un'altra opzione sarebbe usare DATE_FORMAT per ricostruire la stringa della data e forzarla all'inizio del mese:

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

Inoltre, tieni presente che MySQL è davvero scarso nel gestire gli intervalli di date, anche quando il campo è indicizzato. Probabilmente ti ritroverai con una scansione completa della tabella se non stai attento.