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

MS SQL Server Discussion :

traitement chaine de caractères dans la création d'une vue


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut traitement chaine de caractères dans la création d'une vue
    Bonjour,
    n'étant pas un expert en SQL, j'aurais besoin d'un petit coup de main.

    Alors il faudrait que je puisse faire une vue de x colonnes où, dans l'une d'elle, j' extrais une certaine valeur d'une chaine de caractère d'un enregistrement.

    un exemple:

    voilà un enregistrement "INFO" d'une table:

    valeur1_[1[_valeur2_[2[_valeur3[10[

    valeur1, valeur2, valeur3 sont les noms de variables et les valeurs sont entre les crochés ouverts
    valeur1 = 1
    valeur2 = 2
    valeur3 = 10

    Il faudrait que j'extrais la valeur de la variable valeur2 dans ma vue afin d'avoir l'information directement accessible.

    J'espère avoir été assez clair dans mes explications...
    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Effectuer des manipulations de chaines de caractères n'est pas le fort des SGBDR. D'où proviennent ces données ? n'avez vous pas la possibilité d'effectuer un traitement en amont (avant insertion)

    Sinon vous trouverez sur le net des fonctions de split mais si vous ne cherchez qu'une seule valeurs dans la chaine, il y aura surement plus efficace !

    Comptez vous indexer la vue que vous voulez créer ?

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    La requête qui permet d'extraire la valeur 2 est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE @toto varchar(1024) = 'valeur1_[1[_valeur2_[2[_valeur3[10['
    SELECT SUBSTRING
    	(
    		@toto
    		, CHARINDEX('_valeur2_[', @toto) + LEN('_valeur2_[')
    		, CHARINDEX('[_valeur3[', @toto) - (CHARINDEX('_valeur2_[', @toto) + LEN('_valeur2_['))
    	)
    Vous pouvez la transformer en fonction de table en ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE FUNCTION fct_extract_valeur2
    	(@_chaine varchar(max))
    RETURNS TABLE
    AS
    RETURN
    (
    	SELECT SUBSTRING
    		(
    			@_chaine
    			, CHARINDEX('_valeur2_[', @_chaine) + LEN('_valeur2_[')
    			, CHARINDEX('[_valeur3[', @_chaine) - (CHARINDEX('_valeur2_[', @_chaine) + LEN('_valeur2_['))
    		) AS valeur2
    )
    Ce qui vous permet ensuite de l'utiliser dans la définition de votre vue à l'aide de CROSS APPLY, ou éventuellement OUTER APPLY si vous voulez retourner les lignes pour lesquelles la fonction retourne NULL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW	maVue
    AS
    SELECT		T.mesColonnes
    		, EV2.valeur2
    FROM		dbo.maTable AS T
    CROSS APPLY	dbo.fct_extract_valeur2(T.maColonneChaine) AS EV2
    Mais comme vous l'a dit aieeeuuuuu, le mieux est de faire cela en amont, dans le processus d'import des données.
    Notez que vous pouvez faire cela avec une colonne calculée, mais il faut alors transformer la fonction que je vous ai donné en fonction scalaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION fct_extract_valeur2
    	(@_chaine varchar(max))
    RETURNS int
    AS
    BEGIN
    	DECLARE	@valeur2 int
     
    	SELECT @valeur2 = SUBSTRING (
    					@_chaine
    					, CHARINDEX('_valeur2_[', @_chaine) + LEN('_valeur2_[')
    					, CHARINDEX('[_valeur3[', @_chaine) - (CHARINDEX('_valeur2_[', @_chaine) + LEN('_valeur2_['))
    					)
    	RETURN @valeur2
    END
    Et pour ajouter la colonne calculée à la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE dbo.maTable
    ADD maColonne AS (dbo.fct_extract_valeur2(maColonneChaine))
    Et pour l'indexation, cela dépend de votre requête d'interrogation

    @++

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut
    Merci pour ces informations qui m'ont bien servi!!
    J'ai adapté un peu la requête qui permet d'extraire la valeur, car en fait les noms de variables valeurs sont générées par un progiciel et portent en fait des noms totalement différents.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/02/2011, 10h36
  2. Traitement de chaine de caractères dans une procédure
    Par wissem.ba dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/02/2011, 18h06
  3. [String]Recherche d'une chaine de caractères dans une autre
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 29/07/2004, 11h51
  4. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 16h35
  5. chaines de caractères dans fichier .rc ou .res
    Par raggadoll dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/03/2004, 15h19

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