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 :

Extraire chiffre d'une chaine en SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 88
    Points : 58
    Points
    58
    Par défaut Extraire chiffre d'une chaine en SQL
    Bonjour,
    J'ai un champs d'une tableavec des numéros de téléphone (appellons le champ TEL)
    Le problème est qu'il n'y a eu aucune vérification à l'encodage. Mes numéros de téléphones contiennent donc plein de caractères parasites ( / . - et j'en passe).
    Existe t'il un moyen pour supprimer tout ce qui n'est pas un chiffre, le tout dans ma requête sql.

    Ainsi par exemple j'avais pensé à faire un replace en utilisant les expressions régulières comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT REPLACE (TEL,'^[0-9]','') 
    FROM USERS
    mais ça ne marche pas avec cette fonction.

    merci d'avance pour vos idées.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Merci d'indiquer :
    - votre SGBD et sa version
    - le message d'erreur que vous obtenez
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 88
    Points : 58
    Points
    58
    Par défaut
    Bon j'utilise SQL Server 2005.
    Et je n'ai pas de message d'erreur vu qu'il considère l'expression telle quelle.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT REPLACE ('01a2z3e4r5','^[0-9]','')
    renvoie 1a2z3e4r5
    moi je ne voudrais que les chiffres => 012345

    Voila j'espère que ça éclairçi un peu la situation

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Sur le site de SQL Pro http://sqlpro.developpez.com/cours/sqlserver/udf/

    il y a la fonction 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
    25
    26
    27
    28
    29
    30
    31
    32
     
    /****************************************************************************/
    -- purge de caractères indésirables
    /****************************************************************************/
    -- exemple : FN_RESTRICT('à Paris...?', 'abcdefghijklmnopqrstuvwxyz') => 'aris'
    CREATE FUNCTION FN_RESTRICT (@IN VARCHAR (8000),
                                 @CHARSOK VARCHAR(256))
    RETURNS VARCHAR (8000)
    AS 
    BEGIN 
    -- effets de bord
       IF @IN IS NULL
          RETURN NULL
       IF @CHARSOK IS NULL
          RETURN NULL
       IF LEN(@IN) = 0
          RETURN @IN
    -- initialisation
       DECLARE @I INTEGER
       DECLARE @OUT VARCHAR(8000)
       SET @OUT = ''
    -- lecture caractère par caractère
       SET @I =1
       WHILE @I <= LEN(@IN)
       BEGIN
          IF PATINDEX('%' + SUBSTRING(@IN, @I, 1)+ '%', @CHARSOK) > 0
             SET @OUT = @OUT + SUBSTRING(@IN, @I, 1)
          SET @I = @I + 1
       END
       RETURN @OUT
    END
    GO
    Il suffit alors de faire dans votre cas un select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FN_RESTRICT('01a2z3e4r5', '0123456789')

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Gaël,

    Désolé **** Erreur ****

  6. #6
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 88
    Points : 58
    Points
    58
    Par défaut
    yop pas grave pour l'erreur.
    C'est une bonne idée mais le problème est que je ne peux pas utiliser la fonction dans une requête. Car j'ai "undifined procedure FN_....."

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Il faut créer la fonction par CREATE FUNCTION en premier lieu avant de pouvoir l'employer dans les requêtes.

  8. #8
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 88
    Points : 58
    Points
    58
    Par défaut
    ça je m'en doute !

    L'erreur précise est, quand j'exécute la requête sus-nommée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'FN_RESTRICT' is not a recognized function name.
    Malgré avoir créée la fonction, lui donner les droits, etc ...

  9. #9
    Membre à l'essai
    Profil pro
    Webmaster
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour.
    Il te suffit certainement de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT dbo.FN_RESTRICT('01a2z3e4r5', '0123456789')

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

Discussions similaires

  1. extraire les chiffres d'une chaine en bash
    Par zerros dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/12/2011, 21h40
  2. [RegEx] Extraire nombre de 4 chiffres dans une chaine
    Par Booyakha dans le forum Langage
    Réponses: 2
    Dernier message: 30/10/2009, 15h28
  3. Réponses: 5
    Dernier message: 22/04/2009, 14h38
  4. Réponses: 2
    Dernier message: 11/12/2008, 18h44
  5. [MySQL] extraire les chiffres d'une chaine
    Par megane dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/08/2006, 14h29

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