PostgreSQL Generate_Series pour créer une série de dates

PostgreSQL Generate_Series pour créer une série de dates

Vous devez être familier avec la saisie des données dans n'importe quel système de gestion de base de données. En entrant des données, vous n'avez peut-être pas de temps et vous devez ignorer les lacunes dans vos données ou vouloir une série cohérente d'enregistrements. Dans cette situation, PostgreSQL Generate_series est applicable pour atteindre l'objectif requis. Comme son nom l'indique, le mécanisme de cette fonction contient 2 ou 3 entrées. je.e., Generate_series vous permet de générer une séquence d'enregistrements avec un point de départ, un point de terminaison et une valeur incrémente (facultative). Il fonctionne principalement sur deux types de données. je.e., Entiers et horodatages. Pour créer une séquence de dates, la fonction Generate_series est utilisée de différentes manières.

Syntaxe:

>> generate_series ([start], [stop], [facultatif étape / interval]);

La description de la syntaxe de requête est la suivante:

  • [commencer]: C'est le point de départ de la génération d'une série.
  • [arrêt]: Cela montre le point où la série s'arrêtera.
  • [intervalle]: La troisième valeur mais facultative implique combien la série augmentera à chaque étape. La valeur par défaut pour les intervalles est 1.

Ayons une idée de la façon dont la fonction Generate_Series () peut fonctionner. Voici quelques exemples élémentaires. Pour comprendre le concept de cette fonction, nous devons installer et ouvrir le shell de ligne de commande PostgreSQL (PSQL).

Après une configuration réussie et tout en fournissant le nom local, le nom de la base de données, le numéro de port et le mot de passe, nous pouvons passer par n'importe quelle requête sur PSQL.

Exemple 01: générer_series à l'aide de l'opérateur de date plus entier

La requête suivante contient une fonction intégrée «date» pour récupérer la date actuelle. Alors que «A» est l'opérateur fourni. La fonction de cet opérateur est d'ajouter ce nombre particulier (intervalle) dans la partie de la journée de la date. Ou en d'autres termes, avec des intervalles spécifiques, les jours sont décalés et indiqués dans la date. Dans la sortie, l'intervalle «9» sera ajouté chaque jour, je.e., 9 + 9 = 18, puis 27, et ainsi de suite, jusqu'à ce que la somme de 40 soit atteinte.

>> sélectionnez current_date + s.A As dates de generate_series (0,40,9) en tant que S (a);

Exemple 02: Utilisation de la date actuelle pour générer des séries de date

Pour générer des séries de date avec l'aide de la date actuelle, nous utilisons la fonction maintenant (), qui prend automatiquement la date actuelle du système. Vous pouvez voir que la sortie correspondante montre la date jusqu'à 4 jours. En effet, nous avons limité l'exécution en ajoutant 4 jours à la date actuelle. Comme nous avons fourni le temps d'intervalle à 1 jour, donc chaque date sera incrémentée avec 1 ajout de jour

>> sélectionner * dans generate_series (maintenant (), maintenant () + '4 jours', '1 jour');

Exemple 03: Génération des séries de date à l'aide d'horodatage

Horodatages d'heures: Cette fonction utilise également le type de données des horodatages. L'horodatage est essentiellement une séquence de caractères qui fournissent l'heure et la date d'une journée connexe. La fonction correspondante facilite l'utilisateur en fournissant des dates entre les deux dates que nous avons utilisées pour anticiper dans la requête. La liste des horodatages de la date 7 à 11 avec un horodatage toutes les 5 heures est obtenu.

>> Sélectionner * dans Generate_Series ('2021-3-7 00:00' :: Timestamp, '2021-3-11 12:00', '5 heures');

La requête, comme mentionné ci-dessus, est également utilisée pour ajouter des minutes et des secondes avec des heures pour acquérir un meilleur horodat.

Horodatages des jours: Dans l'exemple dépassant, nous avons vu que l'horodatage est utilisé pour montrer les dates entre les deux dates respectives que nous avons fournies avec l'altération des heures incrémentées de 5. Dans l'exemple actuel, nous verrons l'horodatage en jours. Les jours sont incrémentés avec 2 car nous avons initié un écart de 2 jours dans la sortie particulière.

>> SELECT * FROM Generate_Series ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 jours');

Exemple 04: générer des dates spécifiques du mois à l'aide de Date_trunc

Premier jour du mois

Si nous voulons générer la première date du mois en cours, nous utiliserons la requête annexée ci-dessous.La fonction distincte utilisée ici est date_trunc, qui tronque la date à la précision donnée.je.e. maintenant()

>> sélectionnez date_trunc ('mois', maintenant ());

Dernier jour du mois

La même approche date_trunc générera le dernier jour du mois.

>> sélectionnez date_trunc ('mois', maintenant ()) + '1 mois' :: interval - '1 jour' :: interval as end_of_month;

Milieu du mois

Le milieu du mois est obtenu en modifiant dans la requête précédente. Nous utiliserons la fonction moyenne pour obtenir l'objectif respectif. Ou nous allons soustraire 17 jours du dernier.

>> sélectionnez date_trunc ('mois', maintenant ()) + '1 mois' :: interval - '17 jours ':: interval comme mid_of_month;

Exemple 05: Génération de dates à l'aide de données liées au calendrier

Voici l'exemple de l'utilisation des données du calendrier. Nous allons connaître l'année de saut, je.e., Total des jours du mois de février."T" dénote la vraie moyenne des moyens que l'année est une année de saut, et pour "f", il s'agit d'un faux "Dow" représente les jours de la semaine. La colonne «février» contient un nombre total de jours dans le mois. «Jour» désigne le premier jour de Jan chaque année. Selon la recherche, les semaines d'ISO commencent à partir de lundi, et la première semaine d'une année contient le 5 janvier de l'année.

>> Sélectionnez Date :: Date, Extrait ('ISODOW' à partir de la date) comme Dow, To_Char (date, 'Dy') As Day, Extract ('ISO Year' à partir de la date) comme "Iso Year", Extract ('Week' ' à partir de la date) comme semaine, extrait («jour» (date + intervalle «2 mois - 1 jour»)) en février, extrait («année» de la date) comme année, extrait («jour» de (date + intervalle » 2 mois - 1 jour ')) = 29As leap de Generate_series (date «2010-01-01», date «2020-03-01», intervalle «1 an») comme t (date);

Isodow est le jour standard de la semaine «ISO». La requête s'exécutera de 2010 à 2020 tout en manipulant chaque mois, semaine et jour de l'année.

Exemple 06: Génération d'une série de dates et de jours spécifiques au cours de la semaine

Dans cette requête, nous acquérons des dates et des numéros de jour en filtrant les jours dans une semaine. Nous considérerons numériquement les jours de la semaine. Par exemple, à partir de 0 à 6. Où 0 est dimanche et 6 ans samedi. Dans cette requête, vous verrez que nous avons appliqué une condition pour apporter des dates et des numéros de jour qui ne sont pas en 2 et 5. Par exemple, le 20 février, c'était samedi, donc le numéro qui est apparu est de 6.

>> avec les jours comme (sélectionnez dd, extraire (dow from dd) dw from generate_series ('2021-02-20' :: date, '2021-03-05' :: date, '1 jour' :: interval) dd ) Sélectionner * à partir des jours où DW pas dans (2,5);

Conclusion

L'article, comme mentionné ci-dessus, couvre la majorité des fonctionnalités de base liées à la génération de séries pour créer des séries. Les exemples détaillés discutés dans tous les aspects sont si significatifs qu'ils augmenteront les connaissances de votre article respectif.