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

Développement SQL Server Discussion :

1er jour du mois


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut 1er jour du mois
    Bonjour,

    Je cherche à faire proprement une fonction qui me ramène le premier jour du mois en cours.

    J'ai plusieurs idées, mais je ne suis pas convaincu aucune d'entre elles.
    Est-ce que vous pourriez me donner votre avis ?

    Le format attendu est le suivant : YYYY-MM-DD 00:00:00.000 (par exemple : 2013-06-01 00:00:00.000)

    Voici la façons dont je procède actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	select cast(year(getdate()) as char(4))
    +	'-'
    +	case when len(cast(month(getdate()) as char)) = 1 
    			then '0' + cast(month(getdate()) as char(1)) 
    			else cast(month(getdate()) as char(2)) 
    	end
    +	'-01 00:00:00.000'
    Pour info, je suis sur du SQL Server 2000

    Merci d'avance pour votre retour.

    Steven

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Je pense que même sous 2000, ceci doit fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT DATEADD(
    		MONTH
    	,	DATEDIFF(
    				MONTH
    			,	0
    			,	GETDATE()
    		)
    	,0
    )

  3. #3
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Ca fonctionne nickel.
    Et ca me plait bien ^^

    Merci beaucoup


    Si quelqu'un à d'autres idées, n'hésitez pas.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Par défaut
    Bonjour, quelques exemples que j'utilise.
    On peut remplacer le GETDATE() par une variable / un SELECT d'un paramètre.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    DECLARE @Annee INT, 
    @DateDuJour DATETIME,
    @DateDebN DATETIME, @DateFinN DATETIME,
    @DateDebN1 DATETIME, @DateFinN1 DATETIME,
    @DateDebCPN DATETIME, @DateFinCPN DATETIME,
    @DateDebCPN1 DATETIME, @DateFinCPN1 DATETIME,
    @DateDebCPN2 DATETIME, @DateFinCPN2 DATETIME,
    @DateDebMoisM1 DATETIME, @DateFinMoisM1 DATETIME
     
    SET @Annee = YEAR(GETDATE()) - 2000
    SET @DateDuJour = GETDATE()
    SET @DateDebN = DATEADD(yy, YEAR(GETDATE()) - 2000, '20000101')
    SET @DateFinN = DATEADD(yy, YEAR(GETDATE()) - 2000, '20001231')
    SET @DateDebN1 = DATEADD(yy, YEAR(GETDATE()) - 2001, '20000101')
    SET @DateFinN1 = DATEADD(yy, YEAR(GETDATE()) - 2001, '20001231')
    SET @DateDebCPN = DATEADD(yy, YEAR(GETDATE()) - 2000, '20000601')
    SET @DateFinCPN = DATEADD(yy, YEAR(GETDATE()) - 2000, '20010531')
    SET @DateDebCPN1 = DATEADD(yy, YEAR(GETDATE()) - 2001, '20000601')
    SET @DateFinCPN1 = DATEADD(yy, YEAR(GETDATE()) - 2001, '20010531')
    SET @DateDebCPN2 = DATEADD(yy, YEAR(GETDATE()) - 2002, '20000601')
    SET @DateFinCPN2 = DATEADD(yy, YEAR(GETDATE()) - 2002, '20010531')
    SET @DateDebMoisM1 = DATEADD(mm, MONTH(GETDATE()) - 2, DATEADD(yy, YEAR(GETDATE()) - 2000, '20000101'))
    SET @DateFinMoisM1 = DATEADD(dd, -1, DATEADD(mm, MONTH(GETDATE()) - 1, DATEADD(yy, YEAR(GETDATE()) - 2000, '20000101')))
     
     
     
    SELECT
    @Annee AS Annee, 
    @DateDuJour AS DateDuJour,
    @DateDebN AS DateDebN, 
    @DateFinN AS DateFinN,
    @DateDebN1 AS DateDebN1,
    @DateFinN1 AS DateFinN1,
    @DateDebCPN AS DateDebCPN,
    @DateFinCPN AS DateFinCPN,
    @DateDebCPN1 AS DateDebCPN1, 
    @DateFinCPN1 AS DateFinCPN1,
    @DateDebCPN2 AS DateDebCPN2, 
    @DateFinCPN2 AS DateFinCPN2,
    @DateDebMoisM1 AS DateDebMoisM1,
    @DateFinMoisM1 AS DateFinMoisM1

  5. #5
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Je me permets de le ré-ouvrir car j'ai une autre demande dans le même genre.



    Ok, si je veux la date du jour, genre, avec une heure = 00:00, en me basant sur le même exemple, je peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set @TimeStamp =	DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
    Je sais pas si c'est la bonne méthode, mais ca fonctionne bien.

    Maintenant, si je veux aussi cette date - 1 dixième de seconde (ou à la limite -1 seconde), c'est à dire, par exemple pour aujourd'hui, j'aurais ma première date qui serait 21/06/2013 00:00:00.000
    et pour la deuxième, ca donnerait 20/06/2013 23:59:59,999 (ou encore 23:59:59,000)

    Comment est ce que je fais pour obtenir exactement cette date là ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Par défaut
    Bonjour,

    ? DATEADD fait le job non ? Selon l'aide en ligne, la précision est de 0.00333 secondes. En revanche votre exemple ne parle pas de 10ème mais de millièmes de secondes.

    Bref, ceci devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @TimeStamp DATETIME, @TimeStampMS DATETIME
     
    SET @TimeStamp =	DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
    SELECT @TimeStamp
     
    SET @TimeStampMS = DATEADD(MS, -10, @TimeStamp)
     
    SELECT @TimeStamp AS Donnée, 'Standard' AS Libellé
    UNION ALL
    SELECT @TimeStampMS AS Donnée, 'MS' AS Libellé
    Et si vous voulez vraiment plus précis il suffit de passer en DATETIME2 (précision 100 nanosecondes) :
    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
    DECLARE @TimeStamp DATETIME2, @TimeStampMS DATETIME2, @TimeStampMCS DATETIME2, @TimeStampNS DATETIME2
     
    SET @TimeStamp =	DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
    SELECT @TimeStamp
     
    SET @TimeStampMS = DATEADD(MS, -001, @TimeStamp)
    SET @TimeStampMCS = DATEADD(MCS, -001, @TimeStamp)
    SET @TimeStampNS = DATEADD(NS, -100, @TimeStamp)
     
    SELECT @TimeStamp AS Donnée, 'Standard' AS Libellé
    UNION ALL
    SELECT @TimeStampMS AS Donnée, 'MS' AS Libellé
    UNION ALL
    SELECT @TimeStampMCS AS Donnée, 'MCS' AS Libellé
    UNION ALL
    SELECT @TimeStampNS AS Donnée, 'NS' AS Libellé
    Edit : Oops SQL2000... Je laisse le DATETIME2 mais apparemment seulement à partir de 2008

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 27/04/2015, 10h12
  2. [CR 2008] 1er jour du mois suivant
    Par labartho dans le forum Formules
    Réponses: 5
    Dernier message: 29/04/2011, 15h39
  3. 1er jour du mois suivant parametres regionaux
    Par nevil dans le forum IHM
    Réponses: 4
    Dernier message: 29/08/2007, 13h48
  4. Objet personnel - Calcul 1er et dernier jour du mois
    Par amiral59 dans le forum Deski
    Réponses: 8
    Dernier message: 26/04/2007, 08h42
  5. Obtenir le 1er jour du mois d'une date
    Par soso78 dans le forum Access
    Réponses: 4
    Dernier message: 27/09/2005, 12h15

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