PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

date_trunc PostgreSQL di mySQL

Fungsi ekstrak tampaknya berguna dan fungsi tanggal yang saya temukan memecahkan beberapa masalah saya, tetapi apakah ada cara untuk mereplikasi date_trunc PostgreSQL?

Memang, EXTRACT sepertinya ini akan menjadi yang paling cocok untuk kasus khusus ini.

Kode asli Anda di PG:

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

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

Meskipun seharusnya identik secara fungsional, ini sebenarnya adalah mengubah tanggal menjadi string YYYYMM sebelum melakukan perbandingan.

Opsi lain adalah menggunakan DATE_FORMAT untuk membangun kembali string tanggal dan memaksanya ke awal bulan:

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

Perlu diketahui juga bahwa MySQL sangat buruk dalam menangani rentang tanggal, bahkan ketika bidang diindeks. Anda mungkin akan berakhir dengan pemindaian tabel lengkap jika tidak hati-hati.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menambahkan batasan kaskade yang dihapus?

  2. SQLAlchemy tidak ada kesalahan yang diberikan kata sandi

  3. Pergi dan IN klausa di Postgres

  4. Periksa apakah tipe yang ditentukan pengguna sudah ada di PostgreSQL

  5. Bagaimana cara mengetahui apakah upsert adalah pembaruan dengan PostgreSQL 9.5+ UPSERT?