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

strftime di sqlite konversi ke postgres

SQLite ini:

date(date, '-' || strftime('%w', date) || ' days')

Adalah, AFAIK, mengurangkan jumlah hari dalam seminggu (yaitu 0 untuk Minggu, 1 untuk Senin, ...) dari date dan kemudian mengonversi hasilnya kembali ke date; lihat referensi fungsi tanggal untuk detailnya.

Saya pikir yang setara untuk PostgreSQL adalah:

d - extract(dow from d)::int

dimana d adalah tanggal Anda; mengurangkan bilangan bulat dari tanggal mengurangi jumlah hari itu. Jika d adalah stempel waktu, maka Anda mungkin perlu menambahkan beberapa casting. Ada date_trunc('week', 'd') juga, tapi itu mulai menghitung hari dari Senin sehingga Anda tidak perlu menghitungnya.

Berikut rincian singkat dari SQLite dengan date variabel diganti dengan d untuk menghindari kebingungan dengan date() fungsi:

date(d, '-' || strftime('%w', d) || ' days')

Pertama-tama, || adalah operator rangkaian string SQL standar. strftime fungsi adalah pemformat tanggal dan waktu tujuan umum yang berasal dari POSIX ; %w penentu format berarti "hari dalam seminggu sebagai angka dengan hari Minggu sebagai hari nol"; jadi strftime call memberi Anda 0 untuk hari Minggu, 1 untuk Senin, dan seterusnya hingga 6 untuk Sabtu. Jika d adalah hari Selasa, maka strftime panggilan akan menghasilkan 2 dan semuanya berakhir sebagai:

date(d, '-2 days')

Pengubah untuk date SQLite fungsi memiliki berbagai bentuk tetapi '-2 days' artinya persis seperti yang Anda pikirkan:kurangi dua hari dari d . Hasil keseluruhannya adalah Anda mendapatkan d dipotong menjadi minggu (di mana hari Minggu dianggap sebagai hari pertama dalam seminggu).

Di sisi PostgreSQL:

d - extract(dow from d)::int

kita bisa mulai dengan extract ; extract digunakan untuk mengekstrak bagian tertentu dari tanggal atau waktu dan dow berarti "hari dalam seminggu sebagai angka dengan hari Minggu menjadi hari nol". Terdengar akrab? Kemudian ::int melemparkan nomor DOW ke bilangan bulat dan diperlukan karena DOW sebenarnya keluar sebagai nilai presisi ganda dan tidak ada operator yang ditentukan untuk mengurangkan ganda dari tanggal di PostgreSQL; pemeran juga dapat ditulis dalam bentuk standar sebagai cast(x as int) . Saat Anda mengurangi bilangan bulat dari tanggal di PostgreSQL, Anda mengurangi hari itu; Anda bisa lebih eksplisit dengan mengatakan hal-hal seperti - interval '3 days' tapi itu hanya akan menambah lebih banyak kebisingan dalam kasus ini jadi saya memilih kesederhanaan. Jika hari Selasa, maka versi PostgreSQL kami terlihat seperti:

d - 2

dan itu sama dengan:

d - interval '2 days'

Dan setelah pengurangan kami akan kembali pada hari Minggu. Ada juga date_trunc di PostgreSQL tapi itu akan terpotong menjadi Senin bukan Minggu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghubungkan cakephp 2.0 dengan PostgreSQL

  2. Perbarui kolom tabel dengan kolom tabel lain di PostgreSQL

  3. Cegah stemming kata benda yang tepat di PostgreSQL?

  4. Lembar Cheat Konfigurasi PostgreSQL

  5. Memilih berdasarkan bulan di PostgreSQL