IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Procédure stockées création dates de l'année


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut Procédure stockées création dates de l'année
    Bonjour,

    J'ai besoin de créer une procédure stockées qui ferait le traitement suivant :

    Remplir une table DATE avec toutes les dates de l'année, découpées comme ceci: jour, mois, année

    j'aurai ainsi des données suivantes pour janvier 2009 par exemple :
    1,1,2009
    2,1,2009
    3,1,2009
    ...

    Je suis sous SQL Server 2005

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    La récursivité et les CTE avec SQL Server 2005 vous aideront dans ce cas précis.

    Exemple :

    -- Date depuis le 1er janvier 2009 à aujourd'hui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    WITH calendar(date_calendar)
    AS
    (
    	SELECT CAST('20090101' AS DATETIME)
    	UNION ALL
    	SELECT DATEADD(dd,1,date_calendar)
    	FROM calendar
    	WHERE date_calendar < CURRENT_TIMESTAMP
    )
    SELECT 
    	CAST(DAY(date_calendar) AS VARCHAR(2)) + ',' +
    	CAST(MONTH(date_calendar) AS VARCHAR(2)) + ',' + 
    	CAST(YEAR(date_calendar) AS CHAR(4))
    FROM calendar
    OPTION (MAXRECURSION 365)
    ++

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 43
    Points
    43
    Par défaut
    Merci !

    Et si je veux insérer dans une table directement je dois faire qqchose du genre ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    WITH calendar(date_calendar)
    AS
    (
    	SELECT CAST('20090101' AS DATETIME)
    	UNION ALL
    	SELECT DATEADD(dd,1,date_calendar)
    	FROM calendar
    	WHERE date_calendar < CURRENT_TIMESTAMP
    )
    INSERT INTO [DW].[dbo].[Date]
               ([JOUR]
               ,[MOIS]
               ,[ANNEE])
         VALUES  (CAST(DAY(date_calendar) AS VARCHAR(2)))
               ,CAST(MONTH(date_calendar) AS VARCHAR(2))
               ,CAST(YEAR(date_calendar) AS CHAR(4)))
    )
     
    FROM calendar
    OPTION (MAXRECURSION 365)

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Oui,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    DECLARE @t TABLE
    (
     date_format VARCHAR(10)
    );
     
    WITH calendar(date_calendar)
    AS
    (
    	SELECT CAST('20090101' AS DATETIME)
    	UNION ALL
    	SELECT DATEADD(dd,1,date_calendar)
    	FROM calendar
    	WHERE date_calendar < CURRENT_TIMESTAMP
    )
    INSERT INTO @t
    SELECT 
    	CAST(DAY(date_calendar) AS VARCHAR(2)) + ',' +
    	CAST(MONTH(date_calendar) AS VARCHAR(2)) + ',' + 
    	CAST(YEAR(date_calendar) AS CHAR(4))
    FROM calendar
    OPTION (MAXRECURSION 365)
     
    SELECT * FROM @t;
    Il faut simplement adapter en remplaçant @t par votre table cible.

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb procédure stockée création de table
    Par Tleconte dans le forum Administration
    Réponses: 2
    Dernier message: 01/08/2009, 08h18
  2. Procédure stockée et date
    Par InfoDemers dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/07/2008, 18h58
  3. Lancé une procédure stockée à une date précise
    Par Oberown dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/07/2006, 17h23
  4. Création d'un Job déclenchant une Procédure stockée
    Par Drooxy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/04/2004, 17h34
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo