PostgreSQL Generate_Series per creare una serie di date

PostgreSQL Generate_Series per creare una serie di date

È necessario conoscere l'inserimento dei dati in qualsiasi sistema di gestione del database. Durante l'incontro con i dati, potresti non avere tempo e devi ignorare le lacune nei tuoi dati o desideri una serie coerente di record. In questa situazione, PostgreSQL Generate_Series è applicabile per raggiungere l'obiettivo richiesto. Come indica il nome, il meccanismo di questa funzione contiene 2 o 3 ingressi. io.e., Generate_Series consente di generare una sequenza di record con un punto di partenza, punto di terminazione e valore incrementale (opzionale). Funziona principalmente su due tipi di dati. io.e., Numeri interi e timestamp. Per creare una sequenza di date, la funzione Generate_Series viene utilizzata in modi diversi.

Sintassi:

>> generate_series ([start], [stop], [opzionale step/intervallo]);

La descrizione per la sintassi delle query è la seguente:

  • [inizio]: È il punto di partenza per generare una serie.
  • [fermare]: Questo mostra il punto in cui la serie si fermerà.
  • [intervallo]: Il terzo ma opzionale implica quanto la serie aumenterà in ogni passaggio. Il valore predefinito per gli intervalli è 1.

Abbiamo un'idea di come può eseguire la funzione Generate_Series (). Di seguito sono riportati alcuni esempi elementari. Per comprendere il concetto di questa funzione, dobbiamo installare e aprire la shell della riga di comando PostgreSQL (PSQL).

Dopo una configurazione riuscita e mentre fornisce LocalHost, nome del database, numero di porta e password, possiamo passare attraverso qualsiasi query su PSQL.

Esempio 01: Generate_Series utilizzando Data Plus Integer Operator

La seguente query contiene una funzione incorporata da "data" per recuperare la data corrente. Mentre "A" è l'operatore fornito. La funzione di questo operatore è quella di aggiungere quel particolare numero (intervallo) nella parte del giorno della data. O in altre parole, con intervalli specifici, i giorni vengono spostati e mostrati nella data. Nell'output, l'intervallo "9" verrà aggiunto ogni giorno, i.e., 9+9 = 18, quindi 27, e così via, fino a raggiungere la somma di 40.

>> Seleziona current_date + s.a AS Date da Generate_Series (0,40,9) come S (A);

Esempio 02: Utilizzo della data corrente per generare serie di date

Per generare serie di date con l'aiuto della data corrente, stiamo utilizzando la funzione ora (), che prende automaticamente la data corrente dal sistema. Puoi vedere l'output corrispondente mostra la data fino a 4 giorni. Questo perché abbiamo limitato l'esecuzione aggiungendo 4 giorni alla data corrente. Come abbiamo fornito l'orario di intervallo a 1 giorno, quindi ogni data sarà incrementata con 1 aggiunta al giorno

>> Seleziona * da Generate_Series (ora (), ora () + "4 giorni", "1 giorno");

Esempio 03: Generazione delle serie di date usando i timestamps

Timestamp di ore: Questa funzione utilizza anche il tipo di dati dei timestamp. Il timestamp è fondamentalmente una sequenza di caratteri che forniscono l'ora e la data di un giorno correlato. La funzione corrispondente facilita l'utente nel fornire date tra le due date che abbiamo usato per anticipare nella query. Si ottiene l'elenco dei timestamp dalla data 7 a 11 con un timestamp ogni 5 ore.

>> Seleziona * da Generate_Series ('2021-3-7 00:00' :: Timestamp, '2021-3-11 12:00', '5 ore');

La query, come menzionato sopra, viene anche utilizzata per aggiungere minuti e secondi con ore per acquisire un timestamp migliore tra i giorni di pertinente timestamp.

Timestamps dei giorni: Nell'esempio eccessivo, abbiamo visto che il timestamp viene utilizzato per mostrare le date tra le due rispettive date che abbiamo fornito all'alterazione in ore incrementate da 5. Nell'esempio attuale, vedremo il timestamp da giorni. I giorni sono incrementati con 2 poiché abbiamo avviato un divario di 2 giorni nella produzione particolare.

>> Seleziona * da Generate_Series ('2021-03-01' :: Timestamptz, '2021-03-19' :: Timestamptz, '2 giorni');

Esempio 04: generazione di date specifiche del mese utilizzando date_trunc

Primo giorno del mese

Se vogliamo generare la prima data del mese corrente, useremo la query aggiunta di seguito.La funzione distinta qui utilizzata è date_trunc, che tronca la data per una determinata precisione.io.e. Ora()

>> Seleziona Date_Trunc ('Month', ora ());

Ultimo giorno del mese

Lo stesso approccio Date_Trunc genererà l'ultimo giorno del mese.

>> Seleziona Date_Trunc ('Month', Now ()) + '1 mese' :: intervallo - '1 giorno' :: intervallo come end_of_month;

A metà del mese

La metà del mese è ottenuta modificando nella domanda precedente. Utilizzeremo la funzione media per ottenere il rispettivo obiettivo. Oppure sottraggeremo 17 giorni dall'ultimo.

>> Seleziona Date_Trunc ('Month', Now ()) + '1 Month' :: Interval - '17 Days ':: Interval come Mid_of_Month;

Esempio 05: generazione di date utilizzando i dati relativi al calendario

Ecco che arriva l'esempio dell'utilizzo dei dati del calendario. Verremo a conoscere l'anno di salto, io.e., Giorni totali del mese di febbraio."T" indica il vero mezzi l'anno è un anno di salto e per "f", è falso "dow" rappresenta i giorni della settimana. La colonna "Feb" contiene giorni totali nel mese. "Day" indica il primo giorno di Jan di ogni anno. Secondo la ricerca, le settimane dell'ISO iniziano da lunedì e la prima settimana di un anno contiene il 5 gennaio dell'anno.

>> Seleziona Data :: Data, estratto ('Isodow' da data) come Dow, to_Char (data, 'dy') come giorno, estratto ('ISO anno' dalla data) come "anno iso", estratto ('week' dalla data) come settimana, estratto ('Day'from (data + intervallo' 2 mesi - 1 giorno ')) come febbraio, estratto (' anno 'da data) come anno, estratto (' giorno 'da (data + intervallo' 2 mesi-1 giorno ')) = 29as salto da generE_series (data' 2010-01-01 ', data' 2020-03-01 ', intervallo' 1 anno ') come t (data);

Isodow è il giorno standard "ISO" della settimana. La query eseguirà dal 2010 al 2020 mentre si manipola ogni mese, settimana e giorno dell'anno.

Esempio 06: generazione di serie di date e giorni specifici nella settimana

In questa domanda, acquisiremo date e numeri diurni filtrando giorni in una settimana. Considereremo numericamente i giorni della settimana. Ad esempio, a partire da 0 a 6. Dove 0 è domenica e 6 è sabato. In questa domanda, vedrai che abbiamo applicato una condizione per portare date e numeri diurni che non sono in 2 e 5. Ad esempio, il 20 febbraio, era sabato, quindi il numero che è apparso è 6.

>> con giorni come (Select DD, Extract (Dow from DD) DW da Generate_Series ('2021-02-20' :: Data, '2021-03-05' :: Data, '1 giorno' :: intervallo) dd ) selezionare *Da giorni in cui DW non in (2,5);

Conclusione

L'articolo, come menzionato sopra, copre la maggior parte delle funzionalità di base relative alla generazione di serie per creare serie di date. Esempi dettagliati discussi in ogni aspetto sono così significativi da intensificare la conoscenza del rispettivo articolo.