标签:
开发项目中,遇到一个问题:‘abc/def/jkl‘,获取最后一个‘/’之后的所有字符‘jkl’,由于特殊字符‘/‘的个数不固定,如何使用TSQL语句快速实现该需求?
思路非常简单:因为最后一个特殊字符‘/‘的位置不确定,变通一下,使用reverse函数,将最后一个特殊字符‘/‘转化为第一个特殊字符,获取第一个特殊字符‘/‘之前的所有字符。
Script1,用于不以 ‘\’结尾,或以‘\’结尾取空字符的情况
declare @ExpressionToSearch varchar(max) set @ExpressionToSearch=‘/eeabc/def/abc/jkl‘ --set @ExpressionToSearch=‘eeabc/def/abc/jkl‘ --select reverse(@ExpressionToSearch) select right(@ExpressionToSearch, iif(charindex(‘/‘,reverse(@ExpressionToSearch),1)=0, len(@ExpressionToSearch), charindex(‘/‘,reverse(@ExpressionToSearch),1)-1) )
script2,如果以‘/‘结尾,取最后两个‘/‘字符之间的字符串,类似从字符串 ‘abc/def/jkl/‘ 中取‘jkl’
declare @ExpressionToSearch varchar(max) set @ExpressionToSearch=‘/eeabc/def/abc/jkl/‘ --set @ExpressionToSearch=‘eeabc/def/abc/jkl‘ --select reverse(@ExpressionToSearch) select left(StrToSearch,len(StrToSearch)-charindex(‘/‘,reverse(StrToSearch),1)) from ( select right(@ExpressionToSearch, iif(charindex(‘/‘,reverse(@ExpressionToSearch),2)=0, len(@ExpressionToSearch), charindex(‘/‘,reverse(@ExpressionToSearch),2)-1) ) )as T(StrToSearch)
标签:
原文地址:http://www.cnblogs.com/ljhdo/p/5068109.html