PostgreSQL

Postgresql Generate_Series untuk Membuat Seri Tanggal

Postgresql Generate_Series untuk Membuat Seri Tanggal

Anda harus terbiasa dengan entri data dalam sistem manajemen basis data apa pun. Saat memasukkan data, Anda mungkin tidak punya waktu, dan Anda perlu mengabaikan celah dalam data Anda atau menginginkan serangkaian catatan yang konsisten. Dalam situasi ini, generate_series PostgreSQL dapat diterapkan untuk mencapai tujuan yang diperlukan. Seperti namanya, mekanisme fungsi ini berisi 2 atau 3 input. saya.e., generate_series memungkinkan Anda untuk menghasilkan urutan catatan dengan titik awal, titik akhir, dan nilai peningkatan (opsional). Ini terutama bekerja pada dua tipe data. saya.e., Bilangan bulat dan stempel waktu. Untuk membuat urutan tanggal, fungsi generate_series digunakan dengan cara yang berbeda.

Sintaksis:

>> Generate_series ([start],[stop],[optional step/interval]);

Deskripsi untuk sintaks kueri adalah sebagai berikut:

Mari kita lihat bagaimana fungsi generate_series() dapat bekerja. Di bawah ini adalah beberapa contoh dasar. Untuk memahami konsep fungsi ini, kita perlu menginstal dan membuka shell baris perintah postgreSQL (psql).

Setelah konfigurasi berhasil dan sambil memberikan localhost, nama database, nomor port, dan kata sandi, kita dapat melakukan kueri apa pun di psql.

Contoh 01: Generate_series menggunakan DATE plus operator integer

Kueri berikut berisi fungsi bawaan "DATE" untuk mengambil tanggal saat ini. Sedangkan “a” adalah operator yang disediakan. Fungsi operator ini adalah untuk menambahkan nomor tertentu (interval) di bagian hari dari tanggal. Atau dengan kata lain, dengan interval tertentu, hari digeser dan ditampilkan dalam tanggal. Dalam output, interval "9" akan ditambahkan setiap hari, i.e., 9+9=18, lalu 27, dan seterusnya, hingga jumlah 40 tercapai.

>> PILIH TANGGAL_saat ini + s.a AS tanggal DARI Generate_series(0,40,9) AS s(a);

Contoh 02: Menggunakan tanggal saat ini untuk menghasilkan seri tanggal

Untuk menghasilkan deret tanggal dengan bantuan tanggal saat ini, kami menggunakan fungsi now(), yang mengambil tanggal saat ini secara otomatis dari sistem. Anda dapat melihat output yang sesuai menunjukkan tanggal hingga 4 hari. Ini karena kami telah membatasi eksekusi dengan menambahkan 4 hari ke tanggal saat ini. Karena kami telah menyediakan interval waktu hingga 1 hari, maka setiap tanggal akan bertambah dengan 1 tambahan dalam sehari

>> pilih * dari generate_series(now(), now() + '4 days', '1 day');

Contoh 03: Membuat deret tanggal menggunakan Timestamps

Stempel waktu jam: Fungsi ini juga menggunakan tipe data cap waktu. Stempel waktu pada dasarnya adalah urutan karakter yang memberikan waktu dan tanggal dari hari yang terkait. Fungsi yang sesuai memudahkan pengguna dalam memberikan tanggal antara kedua tanggal yang kami gunakan untuk mengantisipasi dalam kueri. Daftar stempel waktu dari tanggal 7 hingga 11 dengan satu stempel waktu setiap 5 jam diperoleh.

>> pilih * dari generate_series('2021-3-7 00:00' ::timestamp,'2021-3-11 12:00', '5 hours');

Kueri, seperti yang disebutkan di atas, juga digunakan untuk menambahkan menit dan detik dengan jam untuk mendapatkan stempel waktu yang lebih baik antara hari stempel waktu yang relevan.

Stempel waktu hari: Dalam contoh di atas, kita telah melihat bahwa stempel waktu digunakan untuk menunjukkan tanggal antara dua tanggal masing-masing yang telah kita berikan dengan perubahan jam bertambah 5. Dalam contoh saat ini, kita akan melihat stempel waktu dalam hitungan hari. Hari bertambah dengan 2 karena kami telah memulai jeda 2 hari dalam output tertentu.

>> pilih * dari generate_series('2021-03-01'::timestamptz,'2021-03-19'::timestamptz,'2 hari');

Contoh 04: Menghasilkan tanggal tertentu dalam sebulan menggunakan date_trunc

Hari pertama bulan ini

Jika kami ingin menghasilkan tanggal pertama bulan ini, kami akan menggunakan kueri yang ditambahkan di bawah ini.Fungsi berbeda yang digunakan di sini adalah date_trunc , yang memotong tanggal ke presisi yang diberikan.saya.e. sekarang()

>> pilih date_trunc('bulan',sekarang());

      Hari terakhir bulan ini

Pendekatan date_trunc yang sama akan menghasilkan hari terakhir bulan ini.

>> pilih date_trunc('month',now()) + '1 bulan'::interval - '1 hari'::interval sebagai end_of_month;

Pertengahan bulan

Pertengahan bulan diperoleh dengan mengubah kueri sebelumnya. Kami akan menggunakan fungsi rata-rata untuk mendapatkan tujuan masing-masing. Atau kami akan mengurangi 17 hari dari yang terakhir.

>> pilih date_trunc('month',now()) + '1 month'::interval - '17 days'::interval as mid_of_month;

Contoh 05: Membuat tanggal menggunakan data terkait kalender

Ini dia contoh penggunaan data kalender. Kita akan mengetahui tahun kabisat, i.e., jumlah hari di bulan Februari."t" menunjukkan benar berarti tahun adalah tahun kabisat, dan untuk "f", itu salah "dow" mewakili hari-hari dalam seminggu. Kolom "Feb" berisi total hari dalam sebulan. "hari" menunjukkan hari pertama Jan setiap tahun. Menurut penelitian, minggu ISO dimulai dari Senin, dan minggu pertama dalam setahun berisi 5 Januari tahun itu.

>> pilih date::date,extract('isodow' from date) as dow,to_char(date, 'dy') as day,extract('iso year' from date) as "iso year", extract('week' dari tanggal) sebagai minggu,ekstrak('hari'dari (tanggal + interval '2 bulan - 1 hari'))sebagai feb,ekstrak('tahun' dari tanggal) sebagai tahun,ekstrak('hari' dari (tanggal + interval ' 2 bulan - 1 hari')) = 29sebagai lompatan dari generate_series(tanggal '2010-01-01', tanggal '2020-03-01', interval '1 tahun') sebagai t(tanggal);

Isodow adalah hari standar "ISO" dalam seminggu. Kueri akan dijalankan dari 2010 hingga 2020 sambil memanipulasi setiap bulan, minggu, dan hari dalam setahun.

Contoh 06: Menghasilkan serangkaian tanggal dan nomor hari tertentu dalam seminggu

Dalam kueri ini, kami akan memperoleh tanggal dan nomor hari dengan memfilter hari dalam seminggu. Kami akan secara numerik mempertimbangkan hari dalam seminggu. Misalnya, mulai dari 0 hingga 6. Dimana 0 adalah hari Minggu dan 6 adalah hari Sabtu. Dalam kueri ini, Anda akan melihat bahwa kami telah menerapkan kondisi untuk membawa tanggal dan nomor hari yang tidak ada di 2 dan 5. Misal tanggal 20 Februari itu hari Sabtu, jadi angka yang muncul adalah 6.

>> dengan hari sebagai (pilih dd, ekstrak(DOW dari dd) dw dari generate_series('2021-02-20'::date,'2021-03-05'::date,'1 day'::interval) dd ) pilih *dari   hari di mana  dw tidak masuk (2,5);

Kesimpulan

Artikel, seperti yang disebutkan di atas, mencakup sebagian besar fungsi dasar yang terkait dengan menghasilkan seri untuk membuat seri tanggal. Contoh mendetail yang dibahas dalam setiap aspek sangat berarti sehingga akan meningkatkan pengetahuan artikel Anda masing-masing.

Cara mengubah penunjuk Mouse dan ukuran kursor, warna & skema pada Windows 10
Penunjuk mouse dan kursor di Windows 10 adalah aspek yang sangat penting dari sistem operasi. Ini dapat dikatakan untuk sistem operasi lain juga, jadi...
Mesin Game Gratis dan Sumber Terbuka untuk Mengembangkan Game Linux
Artikel ini akan membahas daftar mesin game sumber terbuka dan gratis yang dapat digunakan untuk mengembangkan game 2D dan 3D di Linux. Ada banyak mes...
Shadow of the Tomb Raider untuk Tutorial Linux
Shadow of the Tomb Raider adalah tambahan kedua belas untuk seri Tomb Raider - waralaba game aksi-petualangan yang dibuat oleh Eidos Montreal. Permain...