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

Langage SQL Discussion :

Vérifier la validité d'une date


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de Agoye
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Points : 68
    Points
    68
    Par défaut Vérifier la validité d'une date
    Bonjour,

    j'ai une requête que je peux exécuter aussi bien sur une base avec des dates du type yyyy/mm/dd que yyyy/mm/dd.

    comment faire pour vérifier d'une chaine de caractère est une date? j'ai essayé avec isdate mais on ne peut pas mettre de format

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Tu peux essayer de décomposer tes tests
    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
    SELECT    madate || ' semble valide'
    FROM    matable
    WHERE    CHAR_LENGTH(madate) = 10
        AND    SUBSTRING(madate FROM 1 FOR 1) BETWEEN '0' AND '9'  
        AND    SUBSTRING(madate FROM 2 FOR 1) BETWEEN '0' AND '9'  
        AND    SUBSTRING(madate FROM 3 FOR 1) BETWEEN '0' AND '9'  
        AND    SUBSTRING(madate FROM 4 FOR 1) BETWEEN '0' AND '9'
        AND    SUBSTRING(madate FROM 6 FOR 1) BETWEEN '0' AND '9'
        AND    SUBSTRING(madate FROM 7 FOR 1) BETWEEN '0' AND '9'
        AND    SUBSTRING(madate FROM 9 FOR 1) BETWEEN '0' AND '9'
        AND    SUBSTRING(madate FROM 10 FOR 1) BETWEEN '0' AND '9'
    ;
    SELECT    madate || ' semble de format YYYY/MM/DD'
    FROM    matable
    WHERE    CAST(SUBSTRING(madate FROM 6 FOR 2) AS INTEGER) BETWEEN 1 AND 12  
        AND    CAST(SUBSTRING(madate FROM 9 FOR 2) AS INTEGER) BETWEEN 1 
            AND    CASE 
                    WHEN CAST(SUBSTRING(madate FROM 6 FOR 2) AS INTEGER) = 2
                        THEN 29
                    WHEN CAST(SUBSTRING(madate FROM 6 FOR 2) AS INTEGER) IN (4, 6, 9, 11)
                        THEN 30
                    ELSE
                        31
                END
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    En même temps pour moi c'est le même ou l'expression est mal formulée :

    j'ai une requête que je peux exécuter aussi bien sur une base avec des dates du type yyyy/mm/dd que yyyy/mm/dd
    Par contre al1_24 tu pourrais développer un peu plus, j'avoue que la je suis

    J'suis pas expert en date alors cela m'interesse énormément !
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Citation Envoyé par Chtulus Voir le message
    Par contre al1_24 tu pourrais développer un peu plus, j'avoue que la je suis
    La première requête vérifie que la chaîne est de format 'XXXX?XX?XX' où X est un chiffre.
    La seconde suppose que la chaîne est bien de format 'XXXX?XX?XX' et vérifie que les portions JOUR et MOIS correspondent à l'étendue normale des mois et des jours du mois. Rien de transcendant.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Merci al1_24

    mais je restais en fait perplexe sur ma premiére remarque

    En même temps pour moi c'est le même ou l'expression est mal formulée :


    Citation:
    j'ai une requête que je peux exécuter aussi bien sur une base avec des dates du type yyyy/mm/dd que yyyy/mm/dd

    Alors en fait "Agoye" signifié que son champs pouvait prendre la forme

    [AZER/TY/UI] C'est ça...
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Je tente ma chance : t'es sous quel SGBD ?
    => Sous Oracle, il y a les expressions régulières

    (Oui al1, je sais, c'est pas norme SQL...)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  7. #7
    Membre du Club Avatar de Agoye
    Inscrit en
    Décembre 2004
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 61
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    La première requête vérifie que la chaîne est de format 'XXXX?XX?XX' où X est un chiffre.
    La seconde suppose que la chaîne est bien de format 'XXXX?XX?XX' et vérifie que les portions JOUR et MOIS correspondent à l'étendue normale des mois et des jours du mois. Rien de transcendant.
    Effectivement, cette méthode ne me convient pas trop car comme je le disais ma date peut aussi bien être exécuter sur une base de type yyyy/mm/dd que yyyy/dd/mm

    En fait pour faire ce que tu me propose il existe une fonction en sql : isDate('yyyy/mm/dd') qui retourne 0 ou 1

    Mais moi dans mon cas le isDate('20008/05/13') retourne 1 sur une base de type yyyy/mm/dd et 0 sur une base de type yyyy/dd/mm d'ou mon problème

    J'ai essayé de mettre un SET DATEFORMAT YMD mais rien ne change

    Je suis sur une base SQL SERVER 2005

    Merci d'avance

  8. #8
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Pourquoi ne pas avoir utilisé le même format dans les 2 bases...
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  9. #9
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    le soucis, c'est que '2005/01/02', tu ne sais pas si c'est en Janvier ou Février, sauf à connaitre l'origine de ta date. Pas pratique de faire des vérifications, du coup !

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Le SET DATEFORMAT de SQL Server fonctionne parfaitement. Pouvez vous nous montrez exactement les requêtes effectuées qui vous posent un problème ???

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [JavaScript] [FAQ] Vérifier la validité d'une date
    Par Bovino dans le forum Contribuez
    Réponses: 12
    Dernier message: 05/02/2015, 06h01
  2. [v15.7] Vérifier la validité d'une date
    Par GAEREL dans le forum Sybase
    Réponses: 3
    Dernier message: 25/09/2013, 12h04
  3. [Dates] comment vérifier la validité d'une date en php
    Par cortex024 dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2007, 09h46
  4. vérifier la validité d'une date
    Par youp_db dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2006, 11h38
  5. vérifier la validité d'une date
    Par griese dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2006, 16h11

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