Extraire datatables des deux derniers crochets SQL

Donc, je reçois des données sales comme resultset provenant d'un cube, Exemple:

  • [Dates]. [Trimestre]. & [2014Q3]
  • [Centre de profit géographique et géographique]. [Sous-région1]. & [États-Unis]
  • [Géographie Incl. Centre de profit]. [Région]. & [NA]

Je cherche un moyen d'extraire seulement ce qui est à l'intérieur des deux dernières parenthèses, en me basant sur le dernier exemple dont j'ai besoin comme résultat final:

ces résultats proviennent de 3 colonnes différentes, mon idée est de find un moyen de positionner l'index sur le dernier carré gauche, et d'effacer tout ce qui est à gauche, puis de supprimer le dernier caractère de la string CA devrait etre ']'

Ceci est SQL, donc toute aide sur la façon d'accomplir cela sera excellente,

Encore une autre option

Declare @YourTable table (SomeCol varchar(max)) Insert Into @YourTable values ('[Dates].[Fiscal Quarter].&[2014Q3]'), ('[Geography Incl Profit Center].[Sub-Region1].&[United States]'), ('[Geography Incl Profit Center].[Region].&[NA]'), ('[Geography Incl Profit Center].[Region]') -- No Value Select SomeVal = replace(subssortingng(SomeCol,charindex('&[',SomeCol+'&[')+2,500),']','') From @YourTable A 

Résultats

 SomeVal 2014Q3 United States NA 

Voici un exemple de comment. Cela fonctionne pour tous vos cas de test. Remplacez simplement le @var avec votre nom de colonne, bien sûr.

 declare @table table (bracketColumn varchar(64)) insert into @table values ('[Geography Incl Profit Center].[Sub-Region1].&[United States]'), ('[Dates].[Fiscal Quarter].&[2014Q3]'), ('[Geography Incl Profit Center].[Region].&[NA]') select replace( replace( right(bracketColumn,charindex('[',reverse(bracketColumn))) ,'[','') ,']','') from @table 

Comment ça marche

  1. Il inverse votre valeur de champ pour find la première instance de ] dans le text inverse. C'est la même chose que le dernier '[' quand on le regarde normal. En faisant cela, nous pouvons identifier l'indice de cette valeur quel que soit le nombre de parenthèses qui le précède.
  2. Une fois que nous avons identifié cela, nous utilisons RIGHT pour returnner tout de cet endroit à la fin de la string. Cela nous laisse essentiellement avec [yourLastBracket] .
  3. Ensuite, nous remplaçons [ et ] par des strings vides, résultant en votre résultat final

Vous pouvez supprimer cette utilisation supplémentaire de la solution @scsimon en utilisant:

 declare @table table (bracketColumn varchar(64)) insert into @table values ('[Geography Incl Profit Center].[Sub-Region1].&[United States]'), ('[Dates].[Fiscal Quarter].&[2014Q3]'), ('[Geography Incl Profit Center].[Region].&[NA]') SELECT REPLACE(RIGHT(bracketColumn, CHARINDEX('[', REVERSE(bracketColumn))-1), ']', '') FROM @table; 
 Select Reverse(ssortingng2) from(Select Left(ssortingng1,charindex('[',ssortingng1)-1) as ssortingng2 from ( Select Left(Reverse(column),len(column)-1) as ssortingng1 )L)F 

La string 1 sera la string d'input sans les dernières accolades carrées et également sous forme inversée.

La string 2 sera la sous-string de la string inversée jusqu'à la position de première apparition des accolades carrées -1. (Exigence réelle mais toujours en état inversé)

La string 3 sera la sous-string réelle requirejse …