@sqlserver 如何获得最后一个括号的内容或获取最后一次出现的位置
SQL SERVER 使用CHARINDEX,REVERSE组合 获取字符最后一次出现的位置,最后一个括号内的内容.
使用函数CHARINDEX,REVERSE组合
例子
代码片
有一个字段值是 : ‘SF others (not currently used) (60988_i)’
我的最终目的是要拿到 60988_i 但是不确定在第几位,唯一能确定的就是最后一位是 ) 结尾
以下sql能在sqlserver直接运行
declare @org varchar(255)
set @org = 'SF others (not currently used) (60988_i)'
select
len(@org)+1 - CHARINDEX('(', REVERSE(@org)) first -- 最有一次出现的位置要拿
,len(@org)+1 - CHARINDEX(')', REVERSE(@org)) second
,(len(@org)+1 - CHARINDEX(')', REVERSE(@org))) - (len(@org)+1 - CHARINDEX('(', REVERSE(@org))+1) number
,REVERSE(@org) [REVERSE]
,CHARINDEX('(',@org) CHARINDEX
,SUBSTRING(@org
,len(@org)+1 - CHARINDEX('(', REVERSE(@org))+1 --因为是取括号后面的以为所以还要+1
,(len(@org)+1 - CHARINDEX(')', REVERSE(@org))) - (len(@org)+1 - CHARINDEX('(', REVERSE(@org))+1)
)
结果如图显示我最后的无名列已经取到了。
其他几列分别对应我要计算以及取数的位置信息
思路:
1.先使用 REVERSE 将取值倒叙。
2.然后判断倒叙的 ( 第一次出现的位置
3.判断倒叙的 )出现的位置
4.然后两个位置取位数相减,再用 SUBSTRING 截取 第二步的位置后的差得到 60988_i