PostgreSQL

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 familiarisé avec la saisie de données dans n'importe quel système de gestion de base de données. Lors de la saisie des données, vous n'avez peut-être pas le temps et vous devez ignorer les lacunes dans vos données ou souhaitez 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 soit 2 soit 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 fin et une valeur d'incrémentation (facultatif). 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/intervalle]);

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

Ayons une idée de la façon dont la fonction generate_series() peut fonctionner. Ci-dessous 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 l'hôte local, le nom de la base de données, le numéro de port et le mot de passe, nous pouvons exécuter n'importe quelle requête sur psql.

Exemple 01 : Generate_series en utilisant DATE plus un opérateur entier

La requête suivante contient une fonction intégrée « DATE » pour récupérer la date actuelle. Considérant que « a » est l'opérateur fourni. La fonction de cet opérateur est d'ajouter ce nombre particulier (intervalle) dans la partie du jour de la date. Ou en d'autres termes, avec des intervalles spécifiques, les jours sont décalés et affiché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.

>> SELECTIONNER DATE_courante + s.a AS dates FROM Generate_series (0,40,9) AS s(a);

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

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

>> select * from generate_series(now(), now() + '4 days', '1 day');

Exemple 03 : Génération de séries de dates à l'aide d'horodatages

Horodatage des 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'un jour connexe. La fonction correspondante facilite à l'utilisateur la fourniture de dates entre les deux dates que nous avions l'habitude d'anticiper dans la requête. La liste des horodatages de la date 7 à 11 avec un horodatage toutes les 5 heures est obtenue.

>> sélectionnez * à partir de 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 horodatage entre les jours d'horodatage pertinents.

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

>> sélectionnez * dans generate_series('2021-03-01'::timestamptz,'2021-03-19'::timestamptz,'2 jours');

Exemple 04 : Génération de 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 jointe ci-dessous.La fonction distincte utilisée ici est date_trunc , qui tronque la date à une précision donnée.je.e. à présent()

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

      Dernier jour du mois

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

>> select date_trunc('month',now()) + '1 month'::interval - '1 day'::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 le but respectif. Ou on soustraira 17 jours au dernier.

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

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

Voici l'exemple d'utilisation des données de calendrier. Nous connaîtrons l'année bissextile, je.e., nombre total de jours du mois de février." t " indique vrai signifie que l'année est une année bissextile, et pour " f ", il est faux " dow " représente les jours de la semaine. La colonne "Fév" contient le nombre total de jours du mois. « jour » désigne le premier jour de janvier de chaque année. Selon les recherches, les semaines ISO commencent à partir du lundi et la première semaine d'une année contient le 5 janvier de l'année.

>> select date::date,extract('isodow' from date) as dow,to_char(date, 'dy') as day,extract('iso year' from date) as "iso year", extract('week' à partir de la date) en tant que semaine,extrait('jour'de (date + intervalle '2 mois - 1 jour'))en tant que fév,extrait('année' à partir de la date) en tant qu'année,extrait('jour' de (date + intervalle ' 2 mois - 1 jour')) = 29comme saut de generate_series(date '2010-01-01', date '2020-03-01', intervalle '1 an') comme t(date);

Isodow est le jour standard "ISO" de la semaine. 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 de séries de dates et de jours spécifiques dans la semaine

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

>> avec des jours comme (sélectionnez dd, extrayez (DOW from dd) dw from generate_series('2021-02-20'::date,'2021-03-05'::date,'1 day'::interval) dd ) sélectionnez *à partir de   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 de dates. Les exemples détaillés discutés dans chaque aspect sont si significatifs qu'ils augmenteront les connaissances de votre article respectif.

Remappez les boutons de votre souris différemment pour différents logiciels avec X-Mouse Button Control
Peut-être que vous avez besoin d'un outil qui pourrait faire changer le contrôle de votre souris avec chaque application que vous utilisez. Si tel est...
Examen de la souris sans fil Microsoft Sculpt Touch
J'ai lu récemment sur le Microsoft Sculpt Touch souris sans fil et j'ai décidé de l'acheter. Après l'avoir utilisé pendant un certain temps, j'ai déci...
Trackpad et pointeur de souris à l'écran AppyMouse pour tablettes Windows
Les utilisateurs de tablettes ratent souvent le pointeur de la souris, surtout lorsqu'ils ont l'habitude d'utiliser les ordinateurs portables. Les sma...