PostgreSQL

Postgresql Generate_Series untuk Membuat Siri Tarikh

Postgresql Generate_Series untuk Membuat Siri Tarikh

Anda mesti biasa dengan kemasukan data di mana-mana sistem pengurusan pangkalan data. Semasa memasukkan data, anda mungkin tidak mempunyai waktu, dan anda perlu mengabaikan jurang dalam data anda atau menginginkan beberapa siri rekod yang konsisten. Dalam keadaan ini, PostgreSQL menghasilkan_seri berlaku untuk mencapai tujuan yang diperlukan. Seperti namanya, mekanisme fungsi ini mengandungi 2 atau 3 input. i.e., generator_series membolehkan anda menghasilkan urutan rekod dengan titik permulaan, titik penamatan, dan nilai kenaikan (pilihan). Ia berfungsi terutamanya pada dua jenis data. i.e., Bilangan bulat dan cap masa. Untuk membuat urutan tarikh, fungsi menghasilkan_seri digunakan dengan cara yang berbeza.

Sintaks:

>> Generate_series ([mula], [berhenti], [pilihan langkah / selang]);

Huraian untuk sintaks pertanyaan adalah seperti berikut:

Mari kita idea bagaimana fungsi menghasilkan_series () dapat dilaksanakan. Berikut adalah beberapa contoh asas. Untuk memahami konsep fungsi ini, kita perlu memasang dan membuka shell baris perintah postgreSQL (psql).

Setelah konfigurasi berjaya dan sambil memberikan localhost, nama pangkalan data, nombor port, dan kata laluan, kita dapat melalui sebarang pertanyaan di psql.

Contoh 01: Generate_series menggunakan operator DATE plus integer

Pertanyaan berikut mengandungi fungsi DATE "built-in untuk mengambil tarikh semasa. Manakala "a" adalah pengendali yang disediakan. Fungsi pengendali ini adalah untuk menambahkan nombor tertentu (selang) pada bahagian hari pada tarikh. Atau dengan kata lain, dengan selang waktu tertentu, hari diganti dan ditunjukkan pada tarikh. Dalam output, selang “9” akan ditambahkan setiap hari, i.e., 9 + 9 = 18, kemudian 27, dan seterusnya, sehingga jumlah 40 tercapai.

>> PILIH current_DATE + s.a AS tarikh DARI Generate_series (0,40,9) AS s (a);

Contoh 02: Menggunakan tarikh semasa untuk menghasilkan siri tarikh

Untuk menghasilkan siri tarikh dengan bantuan tarikh semasa, kami menggunakan fungsi sekarang (), yang mengambil tarikh semasa secara automatik dari sistem. Anda dapat melihat output yang sesuai menunjukkan tarikh hingga 4 hari. Ini kerana kami telah membataskan pelaksanaan dengan menambahkan 4 hari pada tarikh semasa. Oleh kerana kami telah memberikan selang waktu hingga 1 hari, maka setiap tarikh akan ditambah dengan 1 penambahan dalam sehari

>> pilih * dari generator_series (sekarang (), sekarang () + '4 hari', '1 hari');

Contoh 03: Menjana siri tarikh menggunakan Cap Waktu

Cap waktu jam: Fungsi ini juga menggunakan jenis data cap waktu. Cap waktu pada dasarnya adalah urutan watak yang memberikan masa dan tarikh hari yang berkaitan. Fungsi yang sesuai memudahkan pengguna dalam menyediakan tarikh antara kedua tarikh yang biasa kita jangkakan dalam pertanyaan. Senarai cap masa dari tarikh 7 hingga 11 dengan satu cap waktu setiap 5 jam diperoleh.

>> pilih * dari generator_series ('2021-3-7 00:00' :: cap waktu, '2021-3-11 12:00', '5 jam');

Pertanyaan, seperti yang disebutkan di atas, juga digunakan untuk menambahkan menit dan detik dengan jam untuk memperoleh cap waktu yang lebih baik antara hari cap waktu yang relevan.

Cap waktu hari: Dalam contoh yang melampau, kita telah melihat bahawa cap waktu digunakan untuk menunjukkan tarikh antara dua tarikh masing-masing yang telah kita berikan dengan perubahan jam yang meningkat sebanyak 5. Dalam contoh semasa, kita akan melihat cap waktu dalam beberapa hari. Hari bertambah dengan 2 kerana kita telah memulakan jurang 2 hari dalam output tertentu.

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

Contoh 04: Menjana tarikh tertentu dalam bulan menggunakan tarikh_trunc

Hari pertama dalam sebulan

Sekiranya kita ingin menghasilkan tarikh pertama bulan semasa, kita akan menggunakan pertanyaan yang dilampirkan di bawah.Fungsi berbeza yang digunakan di sini adalah date_trunc, yang memangkas tarikh dengan tepat.i.e. sekarang ()

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

      Hari terakhir dalam sebulan

Pendekatan date_trunc yang sama akan menghasilkan hari Terakhir dalam sebulan.

>> pilih tarikh_trunc ('bulan', sekarang ()) + '1 bulan' :: selang - '1 hari' :: selang sebagai end_of_month;

Pertengahan bulan

Pertengahan bulan diperoleh dengan mengubah permintaan sebelumnya. Kami akan menggunakan fungsi min untuk mendapatkan tujuan masing-masing. Atau kita akan mengurangkan 17 hari dari yang terakhir.

>> pilih tarikh_trunc ('bulan', sekarang ()) + '1 bulan' :: selang - '17 hari ':: selang sebagai pertengahan_bulan;

Contoh 05: Menjana tarikh menggunakan data berkaitan kalendar

Inilah contoh penggunaan data kalendar. Kami akan mengetahui tahun lompat, i.e., jumlah hari pada bulan Februari."T" menunjukkan benar bermaksud tahun adalah tahun lompat, dan untuk "f", itu salah "dow" mewakili hari dalam seminggu. Lajur "Februari" mengandungi jumlah hari dalam sebulan. "Hari" menunjukkan hari pertama Jan setiap tahun. Menurut penyelidikan, minggu ISO bermula dari hari Isnin, dan minggu pertama dalam setahun mengandungi 5 Januari tahun ini.

>> pilih tarikh :: tarikh, ekstrak ('isodow' dari tarikh) sebagai dow, to_char (tarikh, 'dy') sebagai hari, ekstrak ('iso tahun' dari tarikh) sebagai "tahun iso", ekstrak ('minggu' dari tarikh) sebagai minggu, ekstrak ('hari' dari (tarikh + selang '2 bulan - 1 hari')) sebagai feb, ekstrak ('tahun' dari tarikh) sebagai tahun, ekstrak ('hari' dari (tarikh + selang ' 2 bulan - 1 hari ')) = 29 lompatan dari generator_series (tarikh' 2010-01-01 ', tarikh' 2020-03-01 ', selang' 1 tahun ') sebagai t (tarikh);

Isodow adalah hari standard "ISO" dalam seminggu. Pertanyaan akan dilaksanakan dari tahun 2010 hingga 2020 sambil memanipulasi setiap bulan, minggu, dan hari dalam setahun.

Contoh 06: Menghasilkan siri tarikh dan nombor hari tertentu dalam seminggu

Dalam pertanyaan ini, kami akan memperoleh tarikh dan nombor hari dengan menyaring hari dalam seminggu. Kami secara numerik akan mempertimbangkan hari dalam seminggu. Contohnya, bermula dari 0 hingga 6. Di mana 0 adalah hari Ahad dan 6 adalah hari Sabtu. Dalam pertanyaan ini, anda akan melihat bahawa kami telah menggunakan syarat untuk membawa tarikh dan nombor hari yang tidak terdapat dalam angka 2 dan 5. Contohnya, pada 20 Februari, ia adalah hari Sabtu, jadi jumlah yang muncul adalah 6.

>> dengan hari sebagai (pilih dd, ekstrak (DOW dari dd) dw dari generator_series ('2021-02-20' :: tarikh, '2021-03-05' :: tarikh, '1 hari' :: selang) dd ) pilih * dari hari-hari di mana dw tidak di (2,5);

Kesimpulannya

Artikel, seperti yang disebutkan di atas, meliputi sebagian besar fungsi dasar yang berkaitan dengan membuat siri untuk membuat siri tarikh. Contoh terperinci yang dibincangkan dalam setiap aspek sangat bermakna sehingga akan meningkatkan pengetahuan artikel anda masing-masing.

Cara Menggunakan Xdotool untuk Merangsang Klik dan Penekanan Tetikus di Linux
Xdotool adalah alat baris arahan sumber terbuka dan bebas untuk mensimulasikan klik dan tekan kekunci tetikus. Artikel ini akan merangkumi panduan rin...
5 Produk Tetikus Komputer Ergonomik Teratas untuk Linux
Adakah penggunaan komputer yang berpanjangan menyebabkan rasa sakit di pergelangan tangan atau jari anda? Adakah anda mengalami sendi kaku dan selalu ...
Cara Mengubah Tetapan Tetikus dan Pad Sentuh Menggunakan Xinput di Linux
Sebilangan besar pengedaran Linux dihantar dengan perpustakaan "libinput" secara lalai untuk menangani peristiwa input pada sistem. Ia dapat memproses...