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 :

Plus petit qu'une date


Sujet :

MS SQL Server

  1. #1
    Invité
    Invité(e)
    Par défaut Plus petit qu'une date
    Bonjour,

    Je voudrais sélectionner les enregistrements qui ont plus d'un an dans la base, donc par exemple aujourd'hui :
    WHERE dateImport<'2005-09-06'

    Le problème c'est qu'il s'arrête en juin, alors qu'en juillet et aout il y en a aussi. Je suppose que c'est pas comme ça qu'on écrit ce genre de condition, pourtant j'en suis persuadée que si

    Quelqu'un voit d'où vient le problème ?
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    regarde la fonction datediff
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select *
    from maTable
    where datediff(yy, thedate, getdate()) >1

  3. #3
    Invité
    Invité(e)
    Par défaut
    ben je trouve pas la fonction datediff dans la doc sql ... Je dois mal cherchée c'est pas possible !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par poopsinou
    ben je trouve pas la fonction datediff dans la doc sql ... Je dois mal cherchée c'est pas possible !
    Doc SQLServer :
    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
     
    DATEDIFF
    Returns the number of date and time boundaries crossed between two specified dates. 
     
    Syntax
    DATEDIFF ( datepart , startdate , enddate ) 
     
    Arguments
    datepart
     
    Is the parameter that specifies on which part of the date to calculate the difference. The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.
     
    Datepart Abbreviations 
    Year yy, yyyy 
    quarter qq, q 
    Month mm, m 
    dayofyear dy, y 
    Day dd, d 
    Week wk, ww 
    Hour hh 
    minute mi, n 
    second ss, s 
    millisecond ms 
     
     
    startdate
     
    Is the beginning date for the calculation. startdate is an expression that returns a datetime or smalldatetime value, or a character string in a date format. 
     
    Because smalldatetime is accurate only to the minute, when a smalldatetime value is used, seconds and milliseconds are always 0.
     
    If you specify only the last two digits of the year, values less than or equal to the last two digits of the value of the two digit year cutoff configuration option are in the same century as the cutoff year. Values greater than the last two digits of the value of this option are in the century that precedes the cutoff year. For example, if the two digit year cutoff is 2049 (default), 49 is interpreted as 2049 and 2050 is interpreted as 1950. To avoid ambiguity, use four-digit years.
     
    For more information about specifying time values, see Time Formats. For more information about specifying dates, see datetime and smalldatetime. 
     
    enddate
     
    Is the ending date for the calculation. enddate is an expression that returns a datetime or smalldatetime value, or a character string in a date format.
     
    Return Types
    integer

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Datediff: Returns the number of date and time boundaries crossed between two specified dates. 
     
    Syntax: DATEDIFF ( datepart, startdate, enddate )
    Il est bon ce ZERS

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oups j'ai rien dis désolée, me suis trompée de doc !! M'apprendra à vouloir tout faire en même temps !!!
    Je vais tester

    Bon ben ça me sort plus rien lol. La méthode que j'avais faite peut pas fonctionner ? Je vais retester encore datediff, jdois faire quelques chose de travers lol
    Toute façon, faut que ça marche !! non mais ho

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par poopsinou
    Oups j'ai rien dis désolée, me suis trompée de doc !! M'apprendra à vouloir tout faire en même temps !!!
    Je vais tester

    Bon ben ça me sort plus rien lol. La méthode que j'avais faite peut pas fonctionner ? Je vais retester encore datediff, jdois faire quelques chose de travers lol
    Toute façon, faut que ça marche !! non mais ho
    je me trompe tout me temp dans le sens.
    Essaie de mettre <0 ou lieu de >1

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par guigui11
    Il est bon ce ZERS
    Merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    Pas grave, mais si tu me dis ça je comprend plus rien

    Si on met >1, ça veut bien dire qu'on veut que les deux dates aient une différence d'un an, et donc je vais récupérer les enregistrements de plus d'un an, non ?

    Ben je dois vraiment être bête parce qu'on dirait qu'il s'en fiche de ma condition :
    WHERE datediff(yyyy, p.dateImport, CAST(DATEPART(yyyy,getdate())+'-'+DATEPART(mm,getdate())+'-'+DATEPART(dd,getdate())AS DATETIME))<0

    J'ai peut-être compliqué trop les choses avec mon cast et datepart non?
    Dernière modification par Invité ; 06/09/2006 à 16h21.

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    moi je ferais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
    from maTable
    where datediff(yy, thedate, getdate()) =1
    puisque la différence entre 2005 et 2006 c'est bien 1 an

  11. #11
    Invité
    Invité(e)
    Par défaut
    Oui mais je veux tous ce qui a PLUS d'un an. Ca a l'air tout bête et ça commence à m'énerver
    Mais mon test marchait presque bien lol sauf qu'il s'arrêtait à juin ! Pourquoi? Ben bonne question. Pourtant ça marche bien les < et > directement sur les dates, parce qu'on fait bien des BETWEEN et le between c'est bien l'équivalent de date<x and date >y non ?

    Ou je dis que des conneries cet après-midi ?

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Ha oui sorry , dans ce cas logiquement c'est bien <0

  13. #13
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    a mon avis il te faut faire l'inverse:

    select *
    from maTable
    where datediff(yy, thedate, getdate()) >1
    te renvoie TOUS les enreg de + de 1 an

    donc

    select *
    from maTable
    where dateadd(year,-1,getdate())< thedate

  14. #14
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    on en perdrais le nord et c'est pourtant pas trés compliqué
    Mais effectivement il me semble que le sens du signe est bien finalement > puisque tu veux récupérer la différence entre les dates et la date courante qui est supérieure à 1 an.

  15. #15
    Invité
    Invité(e)
    Par défaut
    J'arrive plus à réfléchir

    Pour le datediff(yy, thedate, getdate()) il faut bien faire un cast sur getdate non? (pour avoir le format yyyy-mm-dd)

    Et je pense c'est supérieur à 1. Bon vais tester dateadd, vu que je m'en sors même pas avec datediff.

    Au passage, personne n'a d'explication pour ma toute première façon de faire ? j'suis curieuse à ce niveau

  16. #16
    Invité
    Invité(e)
    Par défaut
    Ouaisssssssssss ça marche avec dateadd (par contre ce coup-ci c'est > )

    Merci bien pour vos réponses !!! Je commençais à devenir folle

  17. #17
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    dans ta requete tu faisais WHERE dateImport<'2005-09-06'

    donc si tu as un serveur SQL anglais tu demande les enreg dont la date est inférieure a 2005-9-juin car en mettant dateImport<'2005-09-06'
    sql serveur fait une comparaison implicite chaine a chaine qui est identique a un
    WHERE CAST(dateimport as varchar)<'2005-09-06'

    A+
    serge

  18. #18
    Invité
    Invité(e)
    Par défaut
    D'accord !

    Merci bien pour l'explication. Je le saurais maintenant

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

Discussions similaires

  1. Titre articles de plus en plus petit dans une sidebar
    Par georgetta89 dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2014, 15h11
  2. [XL-2010] trouver la plus petite date d'une liste
    Par Philippe76 dans le forum Excel
    Réponses: 1
    Dernier message: 10/01/2013, 15h53
  3. Date max, plus petite qu'une date données
    Par Fahbien75008 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/02/2010, 13h19
  4. [XSL] gestion de dates, date plus petite qu'une autre.
    Par Caille Rotie dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/01/2006, 11h01
  5. [TP] Tirer 10 dates et afficher la plus petite
    Par moustaphes dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 16/08/2005, 09h54

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