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

Développement SQL Server Discussion :

Supprimer caractere speciaux


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut Supprimer caractere speciaux
    Bonjour à tous,

    je voudrais savoir si il est possible dans une requête (SELECT) sur un champs de remplacer les caractères spéciaux.

    (Uniquement caractère Lettre et chiffre et les caractère spéciaux remplacer par un espace ou un tiret)

    Est-ce réalisable ? Avec un expression Reg?

    Merci d'avance pour vos explications

    guigui69

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Hello,

    La fonction T-SQL suivante devrait faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR ALTER FUNCTION [DBO].[DropSpecialCharacters] (@InputString NVARCHAR(MAX)) 
    RETURNS NVARCHAR(MAX) 
    AS 
    BEGIN 
        WHILE PATINDEX('%[^0-9a-zA-Z]%', @InputString) <> 0 
        BEGIN 
            SET @InputString = STUFF(@InputString, PATINDEX('%[^0-9a-zA-Z]%', 
                                                    @InputString),1, '') 
        END 
     
        RETURN @InputString 
    END
    GO
    Exemple:

    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
    DECLARE @t TABLE (
    	col1 VARCHAR(50)
    );
     
    INSERT @t VALUES ('ABC;-:.<>-_DGH>-ghublkjfdslkfd_:dèpQw_');
    INSERT @t VALUES ('$éàfs_4èp404o5^64é$àt_ät_:');
     
    SELECT 
    	col1,
    	dbo.DropSpecialCharacters(col1)
    FROM @t
     
    --	col1										(No column name)
    --	ABC;-:.<>-_DGH>-ghublkjfdslkfd_:dèpQw_		ABCDGHghublkjfdslkfddèpQw
    --	$éàfs_4èp404o5^64é$àt_ät_:					éàfs4èp404o564éàtät
    ++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Bonjour mikedavem,

    merci pour votre réponses je connaissait pas PATINDEX

    Si je veux rajouter le critère de filtre et de caractere de remplacement en me basant sur votre Function

    Est-ce que ce si est correcte?

    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
    CREATE OR ALTER FUNCTION [DBO].[DropSpecialCharacters] 
    (
    @InputString NVARCHAR(MAX)
    @ExpressionReg VARCHAR(255)
    @caractereremplacement VARCHAR(4)
    ) 
    RETURNS NVARCHAR(MAX) 
    AS 
    BEGIN 
     
       SET @ExpressionReg =  '%['+@ExpressionReg +']%'
    SET @caractereremplacement =  'caractereremplacement'
        WHILE PATINDEX(ExpressionReg , @InputString) <> 0 
        BEGIN 
            SET @InputString = STUFF(@InputString, PATINDEX(ExpressionReg , @InputString),1, caractereremplacement ) 
        END 
     
        RETURN @InputString 
    END
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 
    	col1,
    	dbo.DropSpecialCharacters(col1,'^0-9a-zA-Z',' ')
    merci par avance pour votre retour et votre aide

    guigui69

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Oui c'est possible.

    Par contre fais bien attention à ce que l'expression de remplacement ne vienne pas interférer avec celle qu'il faut remplacer.
    En effet si tu remplaces un caractère par un autre qui doit être lui même remplacé tu vas partir dans une boucle infinie.

    Dans l'exemple que tu donnes c'est le cas (ou peut être qu'il y a eu une erreur de frappe). Tu remplaces un caractère non alpha numérique par un espace, ce qui va induire une boucle infinie puisque lui même n'est pas alpha numérique.

    Il faudrait faire cela dans ton cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 
    	col1,
    	dbo.DropSpecialCharacters(col1,'^0-9a-zA-Z','')
    ++

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Bonjour,

    Merci pour votre retour et votre d'information sur la boucle infini

    je suis entrain de faire un test, par contre si il y a une apostrophe/ une quote il doit le supprimer normalement?

    guigui69

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR ALTER FUNCTION [DBO].[DropSpecialCharacters] (@InputString NVARCHAR(MAX)) 
    RETURNS NVARCHAR(MAX) 
    AS 
    BEGIN 
        WHILE PATINDEX('%[^ 0-9a-zA-Z]%', @InputString) <> 0 
        BEGIN 
            SET @InputString = STUFF(@InputString, PATINDEX('%[^ 0-9a-zA-Z]%',@InputString),1, '') 
        END 
     
        RETURN @InputString 
    END
    GO
    j'ai rajouté un espace entre le chapeaux et le 0 pour autoriser l'espace, dans les deux ligne patindex Est-ce que c'est bon?

Discussions similaires

  1. supprimer caracteres speciaux
    Par nico_1 dans le forum MkFramework
    Réponses: 7
    Dernier message: 26/12/2013, 14h31
  2. [sgbd] perl, oracle et caracteres speciaux
    Par fsapet dans le forum SGBD
    Réponses: 2
    Dernier message: 07/09/2004, 12h22
  3. [Débutant][String] Remplacez les caractères speciaux
    Par paf15 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/04/2004, 23h39
  4. [langage] Caractères spéciaux
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 28/11/2003, 11h39
  5. insertion caracteres speciaux html
    Par arcane dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/09/2003, 15h16

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