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

Requêtes et SQL. Discussion :

Sélectionner seulement des chiffres dans une chaîne SQL [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut Sélectionner seulement des chiffres dans une chaîne SQL
    Bonjour,

    Je travaille sous Access 2010.
    J'ai une table clients dans laquelle se trouvent des codes postaux en type varchar. Certains codes contiennent des lettres ou des caractères comme / ou -. Je souhaite faire une requête SQL pour extraire de cette colonne les codes postaux qui ne comprennent que des chiffres.

    J'ai essayé

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM clients
    WHERE CP LIKE '[0-9]';

    qui ne renvoie rien

    ou encore

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM DBO_FIU_USAGERS
    WHERE CP NOT LIKE '^[0-9]';

    mais qui du coup me renvoie aussi certains codes avec au moins une lettre.

    Merci d'avance pour votre aide !

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    En l'état WHERE CP LIKE '[0-9]' ne vérifie que le 1er caractère de votre chaine.
    Le plus simple
    WHERE CP=Val([CP]);

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette réponse !

    Malheureusement ça ne marche pas, ça me renvoie comme erreur "type de données incompatible dans l'expression du critères" car c'est du VB je suppose ?

    Mais j'en conclus que je peux faire WHERE CP LIKE '[0-9][0-9][0-9][0-9][0-9]' ?!

  4. #4
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Dans ce cas en vba
    WHERE IsNumeric([CP])=True (ou WHERE EstNum([CP])=Vrai)

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Justement je ne connais pas du tout VBA, je voulais le faire simplement en requête SQL sous Access

  6. #6
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Euh... SQLPro, Transact-SQL ou SQL sous Access
    (ou WHERE EstNum([CP])=Vrai) fonctionne parfaitement
    Images attachées Images attachées  

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Quand je fais

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM clients
    WHERE EstNum(CP)=Vrai;

    J'obtiens le message d'erreur suivant : "Fonction "EstNum" non définie dans l'expression.

  8. #8
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Alors essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM clients
    WHERE EstNum([CP])=-1;

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Ça ne marche pas non plus, avec le même message d'erreur

  10. #10
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Le Champ [CP] est bien de type TexteCourt ou TextLong ?
    Une capture d'écran de votre tbl en mode feuille de données et de la req en mode création

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    En fait, j'attaque sous access une base SQL Server via une connexion ODBC, le champ CP dans la base SQL est de type varchar(10)

  12. #12
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM CLIENTS
    WHERE CP NOT LIKE '%[^0-9]%'
    Et ça aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM CLIENTS
    WHERE IsNumeric(CP)=1

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Etrange, le premier code me renvoie aussi des enregistrements avec des lettres et le deuxième s’exécute mais ne renvoie aucun enregistrement.

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Avec =-1 cela fonctionne !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM CLIENTS
    WHERE IsNumeric(CP)=-1;

    Merci beaucoup pour votre aide !

  15. #15
    Invité
    Invité(e)

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CP
    FROM CLIENTS
    WHERE IsNumeric(CP)=True;
    Est plus clair et IsNumeric() n'est pas fiable a 100% pour ce genre de test. Par exemple "4D123" est considere comme numerique de meme "-1".
    Donc c'est "est-ce que je peux transformer la valeur en nombre" et non "est-ce que la valeur est composee uniquement de chiffre".
    Pour un test fiable sur une chaine de longeur connue tu peux en effet utiliser like "[0-9][0-9][0-9][0-9][0-9]" avec autant [0-9] que de chiffres ou les expressions reguliere comme suggere par dysorthographie.

    Une autre possibilite est la petite function suivante :

    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
    public function EstChiffreSeulement(prmTexte as variant) as Boolean
       dim result as Boolean
     
       if Nz(prmTexte,"")<>"" then
               result=True
     
               dim c as string
     
               dim i as long:for I=1 to len(prmTexte)
                    c=mid(prmTexte,i,1)
     
                    if c < "0" or c > "9" then
                       result=false
                       exit for
                   end if
     
              next i
     
          else
             result=false
       end if
     
       EstChiffreSeulement=result
    end function
    Elle va tester chaque caractere pour savoir si c'est un chiffre et retourner faux au premier qui ne l'est pas.

    Enfin si tu as une courte liste de caracteres d'exceptions connus tu peux le faire indirectement en faisant

    • Champ calcule : Replace(Replace([TonChamp]; "-"; ""); "/"; "").
      Critere : <> [TonChamp].
    • Champ TonChamp
      Critere is Not Null and <> ""


    Evidement avec plus que 3 ou 4 cela devient rapidement illisible.

    A+

  17. #17
    Futur Membre du Club
    Femme Profil pro
    Chargée de projet
    Inscrit en
    Septembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargée de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour votre aide, je devrais m'en sortir avec ça !

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

Discussions similaires

  1. Extraire seulement des chiffres dans une cellule
    Par helkøwsky dans le forum Excel
    Réponses: 2
    Dernier message: 12/11/2010, 17h59
  2. des dossiers dans une base sql server
    Par bimus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/11/2006, 17h25
  3. [Tableaux] Extraire les chiffres dans une chaîne
    Par Digiduck dans le forum Langage
    Réponses: 8
    Dernier message: 16/08/2006, 14h33
  4. Peut-on inclure une variable dans une chaîne SQL ?
    Par beegees dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2006, 11h31
  5. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36

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