Lors de la formation ‘MS 10774 Querying Microsoft SQL Server 2012’ que je viens de suivre nous sommes tombés sur une requête SQL sympa.
Celle-ci permet de remplir automatiquement une table calendrier avec tous les jours de l’année en prenant en compte le fait que l’année soit bissextile ou non.


Remplir un calendrier annuel via sql

Un calendrier pour SQL

Cela peut être utile pour créer des tables de tests, de statistiques ou tout autre type de table dont je suis curieux de connaitre la fonction (n’hésitez pas à me donner des exemples en commentaire).

La requête SQL de remplissage de calendrier

-- Création de la table calendrier
SET NOCOUNT ON;
IF OBJECT_ID('HR.Calendrier') IS NOT NULL
	DROP TABLE HR.Calendrier;
CREATE TABLE HR.Calendrier(
	calendrier_date DATE CONSTRAINT PK_Calendrier PRIMARY KEY
);
-- remplis la table calendrier avec tous les jours de l’année.
DECLARE
	@startdate DATE = DATEFROMPARTS(YEAR(SYSDATETIME()), 1, 1),
	@enddate DATE = DATEFROMPARTS(YEAR(SYSDATETIME()), 12, 31);
WHILE @startdate <= @enddate
BEGIN
	INSERT INTO HR.Calendrier (calendrier_date )
	VALUES (@startdate);
	SET @startdate = DATEADD(DAY, 1, @startdate);
END;
SET NOCOUNT OFF;
GO
-- Affiche toutes les données de la table calendrier
SELECT
	calendrier_date
FROM HR.Calendrier;

Les explications de cette requête SQL

La première partie de la requête ne sert qu'à créer la table calendrier (Attention, ici on commence par effacer la table calendrier si elle existe). Rien de bien compliqué, un DROP TABLE pour détruire la table si elle existe et un CREATE TABLE pour la créer avec ajout d'une clef primaire histoire de respecter les règles de base de données relationnelles.

SET NOCOUNT ON;
IF OBJECT_ID('HR.Calendrier') IS NOT NULL
	DROP TABLE HR.Calendrier;
CREATE TABLE HR.Calendrier(
	calendrier_date DATE CONSTRAINT PK_Calendrier PRIMARY KEY
);

Voila, nous allons enfin parler de la partie qui vous intéresse vraiment (enfin je suppose si vous lisez cette page), le remplissage de la table avec les jours de l'année.
Donc on commence par déclarer deux variables date (Attention, le type date est un nouveau type apparaissant avec SQL SERVER 2012)

  • startdate qui va être la date de début du calendrier
  • enddate qui va être la date de fin de remplissage du calendrier

DATEFROMPARTS(YEAR(SYSDATETIME()), 1, 1) va nous permettre de récupérer la valeur de l'année courante (du système).

Puis nous allons faire une boucle d'insert tant que la date de début est inférieur ou égale à la date de fin (WHILE @startdate <= @enddate ). SET @startdate = DATEADD(DAY, 1, @startdate); va nous permettre d'incrémenter de 1 jour en 1 jour la variable startdate pour pouvoir à terme arrêter la boucle.

-- remplis la table calendrier avec tous les jours de l’année.
DECLARE
	@startdate DATE = DATEFROMPARTS(YEAR(SYSDATETIME()), 1, 1),
	@enddate DATE = DATEFROMPARTS(YEAR(SYSDATETIME()), 12, 31);
WHILE @startdate <= @enddate
BEGIN
	INSERT INTO HR.Calendrier (calendrier_date )
	VALUES (@startdate);
	SET @startdate = DATEADD(DAY, 1, @startdate);
END;

Et enfin, la dernière partie de la requête SQL, un simple SELECT pour vérifier que les données saisies sont correctes.

-- Affiche toutes les données de la table calendrier
SELECT
	calendrier_date
FROM HR.Calendrier;

Mots clefs liés à cet article:

  • comment afficher tous les jours de l\année dans un tcd access
  • creer calendrier sql
  • calendrier sql
  • script sql server pour création de calendrier
  • comment écrire automatiquement sur une table sql
  • table date calendrier sql
  • table calendrier oracle
  • table calendrier jour férié oracle
  • lister tous date sql server
  • hr@outreachmarketing com pk loc:FR