sql >> Databáze >  >> RDS >> PostgreSQL

Date_trunc PostgreSQL v mySQL

Funkce extraktu se zdá užitečná a funkce data, kterou jsem našel, řeší některé mé problémy, ale existuje nějaký způsob, jak replikovat date_trunc PostgreSQL?

Opravdu, EXTRACT vypadá to, že to bude pro tento konkrétní případ nejbližší.

Váš původní kód v PG:

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

Pomocí 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)

I když by to mělo být funkčně identické, ve skutečnosti se data před provedením porovnání mění do řetězce RRRRMM.

Další možností by bylo použití DATE_FORMAT znovu sestavit řetězec data a vynutit jej na začátek měsíce:

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

Uvědomte si také, že MySQL se opravdu špatně vypořádává s rozsahy dat, i když je pole indexováno. Pokud nebudete opatrní, pravděpodobně skončíte s úplným skenováním tabulky.



  1. MySQL utf8mb4, Chyby při ukládání emotikonů

  2. Neplatné číslo parametru:parametr nebyl definován Vkládání dat

  3. Použijte SET TEXTSIZE k omezení dat vrácených pro každý řádek na serveru SQL Server

  4. Pochopení indexů v MySQL:Část první