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 :

Comparer des dates en T-SQL


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 26
    Points
    26
    Par défaut Comparer des dates en T-SQL
    J'ai 2 champs date qui sont des chaînes de caractère. Le premier est sous la forme "2005 05/25 13:45" et l'autre "2005/05/25". Je ne dois pas prendre en considération l'heure, mais les mois/jours oui.
    Voici les grande ligne de mon code de validation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT @temp = 1 WHERE @logDate BETWEEN @inclDate1 AND @inclDate2
    				IF @temp <> 1
    					SET @retourValidation = 0
    SELECT @temp = 1 WHERE @logDate > @inclDate1
    				IF @temp <> 1
    					SET @retourValidation = 0
    SELECT @temp = 1 WHERE @logDate< @inclDate2
    				IF @temp <> 1
    					SET @retourValidation = 0
    ou les variables @logdate sont sous la première forme de date, et les @incl sous la deuxième forme de date. Il compare bien les années, mais ne prend pas compte des mois et jours et je ne sais pas comment régler se problème. Je pensais faire quelque conversion pour réglé ce problème, mais je ne suis pas habile avec T-SQL. Ces du code dans un fonctions en T-SQL, MS SQL Server.
    J'attend vos suggestions
    Merci d'avance
    Abyssos

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    datediff peut te donner la différence entre 2 dates en années, mois, jours ou plus précis si tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select datediff(day, '2005/05/25 13:45','2005/05/25')

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    C'est super merci, je connaissais pas cette méthode.
    Cependant, la date que je dois comparer n'a pas de "/" entre lannée et le mois -> "2004 07/36 12:35"
    Est-ce que ca pourrais causer un problème ou datediff va gérer cette différence de caractère?
    Merci
    Abyssos

    EDIT: Je viens de le tester comme suis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IF (SELECT datediff(day, @logDate, @inclDate1)) >0 AND  (SELECT datediff(day, @logDate, @inclDate2)) <0
    					SET @retourValidation = 0
    mais ca me fais une erreur:
    Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaîne de caractères.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    J'ai très apprécier ta rapidité de réponse IG_Snoop.
    Sauf que ca ne marche pas encore, j'ai réussi a mettre mes 2 chaîne de caractère sous la même forme soit: YYYY/MM/JJ
    il y a une erreur lorsqu'il essaie d'exécuter mon datediff:
    La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et d'heure.

    J'ai l'impression qu'il inverse les mois et jours dans la syntax de la date, et essaye de retrouver le 17ieme mois et je ne sais pas comment résoudre cette erreur. Je ne suis pas sure a 100% que c'est ca l'erreur, mais ca ressemble étrangement a ca.
    En attente de vos suggestions
    Merci d'avance

    AbyssoS

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Après plusieurs tests, je suis convaincu que t-sql interprète ma date en anglais au lieu de français. Mon format de date est AAAA/MM/JJ cependant il est interpréter comme YYYY/DD/MM.
    Voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Serveur : Msg 242, Niveau  16, État 3, Procédure checkinclusionlogiciel, Ligne 77
    La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et d'heure.
    Elle survient seulement lorsque mon jour est plus grand que 12, donc c'est évident que c'est l'interprètation de la date.
    Malheureusement je ne sais pas du tout comment remédier à ça.
    Voici ma ligne de commande qui test ma date (les @log sont les date a tester et les @incl sont les date borne max/min)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF (SELECT datediff(day, @logDate, @inclDate1)) >0 AND  (SELECT datediff(day, @logDate, @inclDate2)) <0
    C'est une alternative a between car between ne considérais pas mes mois et jour, mais seulement les années, p-e que ca vient de la même erreur cad l'interprètation du format de la date
    En attente de vos suggestions
    Merci d'avance
    Abyssos

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    ty peux utiliser date format pour interpréter correctement ta date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SET DATEFORMAT ydm
    GO
    DECLARE @datevar datetime
    SET @datevar = '2005/25/02'
    SELECT @datevar
    GO

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Je l'utiliserais bien, sauf que je penses que le problèeme va persister. Les dates que j'utilise, ceux @inclDate1 et 2 viennent d'une base de donnée et les date a tester @logDate, vien d'un fichier d'inventaire des logiciels d'un poste. Mais je vais l'essayer quand même

    AbyssoS

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Super, Merci IG_Snoop!!
    SET DATEFORMAT ymd marche à merveille. mon traitement sur les dates est faite dans une fonctions et je ne peux pas mettre de set DATEFORMAT dans une fonction, mais en l'ajoutant dans ma procédure stockée qui appel ma fonction, ca marche!

    Merci encore
    AbyssoS

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

Discussions similaires

  1. [MySQL] Comparer des dates sql + php
    Par Jobozzo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/07/2011, 18h21
  2. [SQL] comparer des dates ?
    Par taffMan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/06/2007, 10h00
  3. [SQL2K] requête SQL, comparer des dates
    Par cortex024 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/03/2006, 14h32
  4. Comparer des Dates (Access, jdbc)
    Par babylone7 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/07/2005, 10h01
  5. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15

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