所以我收到来自多维数据集的结果集的一些脏数据, 示例:
我正在寻找一种方法来仅提取最后两个括号内的内容, 基于最后一个例子,我需要作为最终结果如下:
'2014Q3'
'美国'
'NA'
这些结果来自3个不同的列,我的想法是找到一种方法将索引放在最后的'['左方括号上,并删除左边的任何内容,然后从中删除最后一个字符它应该是']'
的字符串这是SQL,所以关于如何实现这一目标的任何帮助都会非常好,
答案 0 :(得分:2)
以下是一个示例。它适用于所有测试用例。当然,只需将@var
替换为您的列名。
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
工作原理
]
的第一个实例。这与上一次' ['看着它正常。这样做,无论前面有多少个括号,我们都可以id这个值的索引。 RIGHT
返回从此位置到字符串末尾的所有内容。这基本上留给我们[yourLastBracket]
。 [
和]
,从而产生最终结果答案 1 :(得分:1)
又一个选择
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(substring(SomeCol,charindex('&[',SomeCol+'&[')+2,500),']','')
From @YourTable A
返回
SomeVal
2014Q3
United States
NA
答案 2 :(得分:1)
您可以使用以下命令从@scsimon解决方案中删除额外的REPLACE
用法:
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;
答案 3 :(得分:0)
Select Reverse(string2) from(Select Left(string1,charindex('[',string1)-1) as string2 from ( Select Left(Reverse(column),len(column)-1) as string1 )L)F
字符串1将是没有最后方括号的输入字符串,也是反向形式。
字符串2将是反向字符串的子字符串,直到第一次出现方括号-1的位置。(实际要求但仍处于反转状态)
字符串3将是所需的实际子字符串...