PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Date_trunc w PostgreSQL w mySQL

Funkcja ekstraktu wydaje się przydatna, a funkcja date, którą znalazłem, rozwiązuje niektóre z moich problemów, ale czy istnieje sposób na zreplikowanie date_trunc w PostgreSQL?

Rzeczywiście, EXTRACT wygląda na to, że będzie to najbliższe dopasowanie w tym konkretnym przypadku.

Twój oryginalny kod w PG:

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

Korzystanie z 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)

Chociaż powinno być funkcjonalnie identyczne, w rzeczywistości jest to zniekształcanie dat w ciąg RRRRMM przed wykonaniem porównania.

Inną opcją byłoby użycie DATE_FORMAT aby odbudować ciąg daty i wymusić go na początku miesiąca:

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

Należy również pamiętać, że MySQL naprawdę słabo radzi sobie z zakresami dat, nawet gdy pole jest indeksowane. Jeśli nie będziesz ostrożny, prawdopodobnie skończysz z pełnym skanowaniem tabeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) w PostgreSQL?

  2. PostgreSQL — pisanie dynamicznego sql w procedurze składowanej, która zwraca zestaw wyników

  3. 9.6 Najstraszniejszy Turniej Patch

  4. BŁĄD:nie można statystycznie pliku XX.csv:nieznany błąd

  5. Po przywróceniu mojej bazy danych serial usunięty z kolumny w Postgresql