Donc, je reçois des données sales comme resultset provenant d'un cube, Exemple:
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:
2014Q3
'États Unis'
'N / A'
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
]
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. RIGHT
pour returnner tout de cet endroit à la fin de la string. Cela nous laisse essentiellement avec [yourLastBracket]
. [
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 …