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 :

Problème avec fonction CHAR_LENGTH


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 4
    Par défaut Problème avec fonction CHAR_LENGTH
    Bonjour,

    A partir d'une table contenant des individus, je souhaite pouvoir différencier les personnes dont le noms contiennent des chiffres afin de ne pas les traiter par des requêtes d'uniformisation de la base.

    La solution que j'ai trouvée consiste à "effacer" du nom tous les chiffres à l'aide de la fonction LTRIM puis de comparer la longueur de chaine de caractère à celle initiale. Si la chaîne initiale est différente (inférieure) de celle traitée par LTRIM, cela signifie qu'elle contient des chiffres.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NOM, char_length(LTRIM(NOM,'0123456789')) AS a ,char_length(NOM) AS b FROM TABLE
    WHERE(SEXE='M' and a > b )
    J'ai l'erreur suivante : ORA-00904: "CHAR_LENGTH" : identificateur non valide

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    C’est basique non ? Il vous dit qu’il ne connaît pas char_length. En Oracle la fonction est length.
    Mais votre algo ne marche pas pour TOTO92 ni pour TO92TO.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 4
    Par défaut
    Merci mnitu
    Effectivement, la fonction LENGTH est plus appropriée.

    En ce qui concerne mon algorithme, effectivement celà ne marchera pas dans les cas données ( TO92TO et TOTO92).

    En fait, je recherche un moyen plus simple d'éviter à utiliser les conditions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NOM not like '%0'
    AND NOM not like '%1'
    ANDNOM not like '%2'
    AND NOM not like '%3'
    AND NOM not like '%4'
    AND NOM not like '%5'
    AND NOM not like '%6'
    AND NOM not like '%7'
    AND NOM not like '%8'
    AND NOM not like '%9'
    C'est à dire trouver une fonction qui me permette de détecter la présence d'un chiffre dans une chaine de caractères.
    J'ai déjà trouvé et essayé des propositions telles que "[0-9]" mais elles ne marchent pas.

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    A partir de la version 10g vous pouvez utiliser des expressions régulières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT regexp_instr('TO92TO','[[:digit:]]') 
      FROM dual
    /

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Avec translate, c'est fait pour.

    J'ai géré le cas du nom NULL avec les NVL sur les length, ça dépend du besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH t AS (			SELECT 'abc' nom FROM dual
    UNION SELECT '' FROM dual
    UNION SELECT 'TOTO92' FROM dual
    UNION SELECT 'TO92TO' FROM dual
    )
    SELECT nom, TRANSLATE(nom, 'a0123456789', 'a') tr, LENGTH(TRANSLATE(nom, 'a0123456789', 'a')) len
    FROM t
    WHERE NVL(LENGTH(TRANSLATE(nom, 'a0123456789', 'a')),0) = NVL(LENGTH(nom), 0)
     
     
    NOM	TR	LEN
    abc	abc	3
    <null> <null> <null>

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 4
    Par défaut
    Merci à Mnitu (mais je ne peux pas utilisé les regexp) et à MCM pour cette solution qui fonctionne très bien.
    J'avais déjà essayé avec la fonction TRANSLATE() sans succès, comment pouvez-vous me traduire en explications le fonctionnement de "TRANSLATE(nom, 'a0123456789', 'a')" je crois que quelque chose m'échappe ...
    Cordialement.

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

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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