我的數據是這樣的拉括號中的最右邊的字符串
ABCD.(123).(456)
789.(DEF) JKL.MNO
(PQ).(RS).(TUV)||(WXYz)
我期待拉從最右邊括號括號中的字符串。結果看起來像這樣
(456)
(DEF)
(WXYz)
圓括號內的整個字符串和字符串可能會有所不同。它的子字符串和charindex的一些組合,但我無法弄清楚。
我的數據是這樣的拉括號中的最右邊的字符串
ABCD.(123).(456)
789.(DEF) JKL.MNO
(PQ).(RS).(TUV)||(WXYz)
我期待拉從最右邊括號括號中的字符串。結果看起來像這樣
(456)
(DEF)
(WXYz)
圓括號內的整個字符串和字符串可能會有所不同。它的子字符串和charindex的一些組合,但我無法弄清楚。
這樣的問題表明數據結構存在問題 - 該字符串實際上由多個項目組成。但是,有時這樣的字符串處理是必要的。
下面的方法應該工作,假設括號內的組件總是存在:
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)
COLPAREN和COLPARENT是什麼意思? – baineschile
@baineschile。 。 。 'colparen'只是結果列的名稱。 –
既然你是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)
select REVERSE(substring(reverse('ABCD.(123).(456)'),CHARINDEX(')',reverse('ABCD.(123).(456)')),CHARINDEX('(',reverse('ABCD.(123).(456)'))))
這應該得到喲你想要什麼
你正在使用哪個RDMS? –
Management Studio 2016 – baineschile
僅供參考 - 此數據全部在一列中。 – baineschile