2017-04-21 25 views
0

我的數據是這樣的拉括號中的最右邊的字符串

ABCD.(123).(456) 
789.(DEF) JKL.MNO 
(PQ).(RS).(TUV)||(WXYz) 

我期待拉從最右邊括號括號中的字符串。結果看起來像這樣

(456) 
(DEF) 
(WXYz) 

圓括號內的整個字符串和字符串可能會有所不同。它的子字符串和charindex的一些組合,但我無法弄清楚。

+0

你正在使用哪個RDMS? –

+0

Management Studio 2016 – baineschile

+0

僅供參考 - 此數據全部在一列中。 – baineschile

回答

1

這樣的問題表明數據結構存在問題 - 該字符串實際上由多個項目組成。但是,有時這樣的字符串處理是必要的。

下面的方法應該工作,假設括號內的組件總是存在:

select t.*, colparen 
from t cross apply 
    (values (right(col, charindex('(', reverse(col)) - 1)) v(colr) cross apply 
    (values (charindex(colr, charindex(')', col) + 1)) v(colparen) 
+0

COLPAREN和COLPARENT是什麼意思? – baineschile

+0

@baineschile。 。 。 'colparen'只是結果列的名稱。 –

0

既然你是2016年,你可以使用String_Split()在演唱會與跨應用

注意:如果沒有觀測值並且想要顯示空值,請使用外部應用。

Declare @YourTable table (SomeCol varchar(100)) 
Insert Into @YourTable values 
('ABCD.(123).(456)'), 
('789.(DEF).JKL.MNO'), 
('(PQ).(RS).(TUV).(WXYz)') 


Select B.Value 
From @YourTable A 
Cross Apply (
       Select Top 1 * 
        ,RN=Row_Number() over (Order By (Select Null)) 
       From String_Split(A.SomeCol,'.') 
       Where Value Like '(%)' 
       Order by 2 Desc 
      ) B 

返回

Value 
(456) 
(DEF) 
(WXYz) 

dbFiddle

0
select REVERSE(substring(reverse('ABCD.(123).(456)'),CHARINDEX(')',reverse('ABCD.(123).(456)')),CHARINDEX('(',reverse('ABCD.(123).(456)')))) 

這應該得到喲你想要什麼