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

SQL Oracle Discussion :

[expr. régulière] identifier date et heure


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut [expr. régulière] identifier date et heure
    Bonjour

    Je suis en train d'écrire une procédure d'import de fichier en pl/sql. J'ai commencé à regarder aujourd'hui comment se boutiquaient les expressions régulières et j'ai un doute.

    Je cherche une date du type : 1/01/2006 ou 15/12/1954.

    J'ai donc écrit l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if owa_pattern.match(date, '^[0-31]/[0-12]/\d{4}$') then
    Mais apparemment elle ne fonctionne pas... dois-je traiter tous les caractères un à un ?
    Dans ce cas comment puis désigner une valeur en 0 et 31 ?

    L'expressions suivante [0-3][0-9] marchera pour un nombre entre 0 et 39, et celle-ci [0-3][0-1] pour les valeurs 00,01,10,11,20,21,30,31, n'est ce pas ?

    Merci pour votre aide

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je n'ai pas beaucoup d'expérience en exp regulière, mais tu peux y arriver tout simplement en PLSQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DECLARE
    p_testdate DATE;
    p_date VARCHAR2(20) := TO_CHAR(SYSDATE, 'DD/MM/RRRR');
    BEGIN
     p_test_date := to_date(p_date);
    DBMS_OUTPUT.PUT_LINE('DATE ' || p_date || ' VALIDE');
    EXCEPTION WHEN OTHERS THEN 
    DBMS_OUTPUT.PUT_LINE('DATE ' || p_date || ' INVALIDE');
    END;
    Ca a l'avantage de vérifier la date(l'expression régulière acceptera le 31/02/2007)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    Merci pour ta réponse qui me permettra d'avancer
    mais j'aurai d'autres cas où ce ne seront pas des dates... Y'a t'il un moyen de le faire en expressions régulières ?
    Au pire j'ai imaginé pour faire 31 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if owa_pattern.match(date, '^[0-2][0-9]$') then
    ...
    else if owa_pattern.match(date, '^[0-3][0-1]$') then
    ...
    Ca marcherait mais bon... peut être y a t'il un moyen plus simple ?

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je ne pense pas que tu puisse mettre des plages dans les []
    Un petit tour sur google
    http://fr.wikipedia.org/wiki/Expression_rationnelle

    A mon avis, le mieux c'est (0|1|2|3...|31)
    ou (([0]?[1-9])|([1-2]?[0-9])|30|31) -- A tester, je sais pas si ça peux marcher comme ça.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    Je pense que je vais utiliser ta technique d'ours où tu essaies de convertir et où tu attrapes l'erreur au vol

    Merci de ton aide en tout cas

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

Discussions similaires

  1. Pb Calcul de dates ET heure
    Par priest69 dans le forum Access
    Réponses: 4
    Dernier message: 13/06/2005, 12h33
  2. récupérer la date et heure système
    Par Rnx69 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2005, 15h43
  3. [date et heure] convertion d'une date en chaîne
    Par jean-jacques varvenne dans le forum SQL
    Réponses: 5
    Dernier message: 23/03/2005, 11h31
  4. Manipulations de dates et heures
    Par benj63 dans le forum C++
    Réponses: 5
    Dernier message: 16/12/2004, 15h09
  5. remplacement dans 1 chaînes (expr régulières)
    Par David E dans le forum Général Python
    Réponses: 2
    Dernier message: 09/09/2004, 10h06

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