我的数据是这样的拉括号中的最右边的字符串
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