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 :

détecter lettre alphabétique dans une chaîne de caractères puis la supprimer


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Janvier 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 10
    Points : 9
    Points
    9
    Par défaut détecter lettre alphabétique dans une chaîne de caractères puis la supprimer
    Bonjour les amis,

    Je suis tout nouveau sur les technologies sql server et j'ai besoin de votre aide.
    Je voudrai faire une jointure entre 2 colonnes sachant que l'une ne contient pas de lettre
    where fnb = numerov

    comment je peux faire?

    je voudrais d abord détecter une lettre alphabétique dans la chaîne de caractère puis la supprimer et faire la jointure

    Merci par avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 22
    Points
    22
    Par défaut
    Hello,
    Voici la solution en passant par une fonction. Ce n'est pas la seule solution possible mais si tu as le droit de créer des fonctions dans ton environnement c'est suffisant.
    Cette fonction prend en argument ta valeur chaîne à convertir et retourne un entier. Charge à toi de modifier cette fonction si tu désires le faire aussi pour des "float" etc..

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    CREATE FUNCTION	dbo.fn_DeleteAlphaInMyString( @mystring  varchar(4000))  
    RETURNS int AS BEGIN
    	/*
     
    	*/
    	--Déclaration des vraiables
    	DECLARE	@li_nb_char INT						--Nombre de caractères dans la chaine
    	DECLARE	@li_pos_current_char INT			--Position du caractère courrant
    	DECLARE	@ls_returned_string varchar(4000)	-- Chaine retourné
    	DECLARE	@ls_current_char CHAR(1)			--Caractère courrant
     
    	--Initialisation des vraiables
    	SET	@li_nb_char = len(@mystring)
    	SET	@li_pos_current_char = 1
    	SET	@ls_returned_string =''
     
    	--Si la chaine passé est vide on retourne la valeur null
    	IF @li_nb_char = 0  RETURN NULL
     
    	WHILE @li_pos_current_char <=  @li_nb_char BEGIN
    	--On parcourt chaque caractère...
    		SET @ls_current_char = Substring(@mystring,@li_pos_current_char,1)
    		-- ... En vérifiant qu'il est numérique (compris entre 0 et 9)..
    		IF	@ls_current_char  BETWEEN '0' AND '9'   BEGIN
    			--.. et dans ce cas on le rajoute à la chaine à retourner.
    			SET	@ls_returned_string = @ls_returned_string + @ls_current_char
    		END 
    		--On incrémente la boucle pour passer au caratère suivant
    		SET @li_pos_current_char = @li_pos_current_char + 1		
    	END
     
    	-- On retourne la valeur numérique détecté
    	RETURN (SELECT convert(integer,@ls_returned_string))
    END
    go
     
     
    --> Exemple pour tester la fonction 
    SELECT '123' AS DonneeAlphaNumerique
    INTO	#MATABLE
    UNION
    SELECT '4A56' AS DonneeAlphaNumerique
     
    UNION
    SELECT '78B%' AS DonneeAlphaNumerique
     
     
    --> 
    SELECT * ,MonEntier=dbo.fn_DeleteAlphaInMyString (DonneeAlphaNumerique)
    from	#MATABLE

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 854
    Points : 52 995
    Points
    52 995
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Maduser Voir le message
    Hello,
    Voici la solution en passant par une fonction. Ce n'est pas la seule solution possible mais si tu as le droit de créer des fonctions dans ton environnement c'est suffisant.
    Cette fonction prend en argument ta valeur chaîne à convertir et retourne un entier. Charge à toi de modifier cette fonction si tu désires le faire aussi pour des "float" etc..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE FUNCTION	dbo.fn_DeleteAlphaInMyString( @mystring  varchar(4000)) ...
    la fonction que vous avez donné ne fait pas tout à fait ce qui est demande, car elle ne conserve que les chiffres ! or il était demande de ne retirer que les lettres.
    Ainsi votre fonction transformera "123.5" en "1235" !

    Utilisez 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
    CREATE FUNCTION dbo.F_CLEAN_LETTERS (@DATA NVARCHAR(4000))
    RETURNS NVARCHAR(4000)
    AS
    BEGIN
       IF @DATA IS NULL OR @DATA = N''
          RETURN @DATA;
       DECLARE @I SMALLINT, @C NCHAR(1), @OUT NVARCHAR(4000);
       SELECT @I = 1, @OUT = N'';
       WHILE @I <= LEN(@DATA)
       BEGIN
          SET @C = SUBSTRING(@DATA, @I, 1);
          SET @OUT = @OUT + CASE WHEN @C COLLATE French_CI_AI BETWEEN N'A' AND N'Z' THEN N'' ELSE @C END;
          SET @I = @I + 1;
       END;
       RETURN @OUT;
    END
    A +

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 22
    Points
    22
    Par défaut
    Hello,
    oui je sais que la réponse n'est pas exacte c'est bien pour celà que j'ai précisé
    Cette fonction prend en argument ta valeur chaîne à convertir et retourne un entier. Charge à toi de modifier cette fonction si tu désires le faire aussi pour des "float" etc..'
    Je ne voulais pas mâcher tout le travail

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/04/2009, 13h59
  2. Détecter saut de ligne dans une chaîne de caractères
    Par link256 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 30/03/2009, 15h25
  3. Nombre d'occurences dans une chaîne de caractères
    Par Olivier14 dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 19h11
  4. ?> dans une chaîne de caractéres
    Par nebule dans le forum Langage
    Réponses: 8
    Dernier message: 15/11/2005, 15h01
  5. Réponses: 4
    Dernier message: 23/06/2004, 09h51

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