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 :

Tests sur des dates mal stockées


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut Tests sur des dates mal stockées
    Bonjour à tous,

    je travaille actuellement sur un projet dans lequel nous devons aller récupérer des données sur une bdd SQLSever.

    La récupération de ces données peut se faire suivant plusieurs paramètres : Date de création, date de modification, date d'annulation, date de suppression, respectivement DATERESA, DATEMODIF, DATEANNUL, DATESUPPR dans la base.

    Pour DATERESA, aucun problème, elle es stockée au format date dans la base, donc pas de souci, test simple au niveau de la requete.

    Par contre, les 3 autres champs sont stockés en varchar(20). Déjà c'est pas très propre, mais bon, je dois faire avec.
    Pour DATEANNUL et DATESUPPR, elles sont écrit sous forme de chaine comme une date classique, du genre '08/07/2008'.
    Là encore, je peux faire avec assez simplement, même si ça va considérablement ralentir les requetes.

    Par contre, j'ai un gros souci avec le champ DATEMODIF. Je ne sais par quel miracle, mais elle peut être stockée de 2 façons différentes : soit assez classique '05/07/2008 18:30:53', soit sous une forme un peu moins commune 'juil 2 2008 4:27PM'.

    Là je vous avoue que je tique beaucoup, et que je ne sais pas trop comment je vais pouvoir procéder. En effet, il faut que je compare cette date avec celle de la dernière requête qu'on a fait, pour récupérer les enregistrements qui auraient été modifiés depuis.

    Seulement comment effectuer ces comparaisons ? J'ai bien pensé utiliser une procédure stockée, mais je ne maitrise pas trop le sujet encore et les échéances sont assez courtes, et je ne suis même pas sur de pouvoir obtenir les droits pour en créer sur le serveur (nous n'avons que des droits en lecture pour le moment)

    C'est pourquoi je me tourne vers vous pour me donner un petit coup de pouce qui me serait bien salvateur.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Pour la comparaison, essaie de voir si un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(tacolonne as DATETIME) FROM tatable
    se termine sans erreur. Si oui, tu peux faire des comparaisons en transtypant le contenu de cette façon.
    Tu peux aussi utiliser la fonction ISDATE()

  3. #3
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Ouh pinaise, ça fonctionne parfaitement .

    Merci beaucoup rudib !

  4. #4
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Arg, j'avais pas testé la requete complète, juste sur un enreigistrement problématique.

    Voilà ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT     SEQRESA,
                   DATERESA,
                   CAST(DATEMODIF AS DATETIME),
                   DATEMODIF,
                   CAST(DATEANNUL AS DATETIME),
                   DATEANNUL, 
                   CAST(DATESUPPR AS DATETIME),
                   DATESUPPR
    FROM        RESA
    WHERE      DATERESA > '20080701'
    OR           CAST(DATEMODIF AS DATETIME) > '20080701'
    OR           CAST(DATEANNUL AS DATETIME) > '20080701'
    OR           CAST(DATESUPPR AS DATETIME) > '20080701'
    En exécutant ça, j'ai l'erreur suivante :

    [Microsoft][ODBC SQL Server Driver][SQL Server]Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaîne de caractères.

    Mais ce qui est le plus étonnant, c'est que si j'exécute cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT     SEQRESA,
                   DATERESA,
                   CAST(DATEMODIF AS DATETIME),
                   DATEMODIF,
                   CAST(DATEANNUL AS DATETIME),
                   DATEANNUL, 
                   CAST(DATESUPPR AS DATETIME),
                   DATESUPPR
    FROM        RESA
    WHERE      DATERESA > '20080701'
    Ca fonctionne très bien. Donc si on fait le cast dans le select, ça passe bien, mais si on le fait dans le WHERE, y'a problème...

    J'me dis que c'est peut-etre à cause des champs vides, mais pourquoi ça ne pose pas de problème dans le select alors ?

    Merci d'avance pour vos lumières !

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/03/2015, 13h51
  2. Réponses: 5
    Dernier message: 18/10/2011, 15h51
  3. [iReport 3.7.2] Test sur des Dates
    Par dmo95 dans le forum iReport
    Réponses: 1
    Dernier message: 29/06/2010, 11h49
  4. [A-03] Test sur des dates dans des textBox
    Par moilou2 dans le forum IHM
    Réponses: 3
    Dernier message: 27/10/2008, 13h39
  5. Problèmes Test sur des dates
    Par guigui11 dans le forum ASP
    Réponses: 1
    Dernier message: 11/12/2006, 16h18

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