你好的!
with t(id) as(select 'S9-110-2' union all
select 'S10-031-1' union all
select 'S10' union all
select 'S12-022' union all
select 'S12-022-1-2')
select id,
substring(id,1,(case when charindex('-',id,-1) = 0 then 99 else charindex('-',id,-1) end))+
substring(substring(id,(case when charindex('-',id,-1) = 0 then 99 else charindex('-',id,-1) end)+1,999),1,(case when charindex('-',substring(id,charindex('-',id,-1)+1,999)) = 0 then 99 else charindex('-',substring(id,charindex('-',id,-1)+1,999)) end)-1),
case when charindex('-',substring(id,charindex('-',id,-1)+1,999)) = 0 then 99 else charindex('-',substring(id,charindex('-',id,-1)+1,999)) end lens
from t
你试试吧!
望采纳!
patindex(pattern,expression) 精确匹配,完全匹配1,不完全匹配0 例如:patindex('aa','aa') 返回1 完全匹配 patindex('aa','aab') 返回0 不完全匹配 patindex(%pattern%,expression)模糊匹配,返回从第几位开始匹配 CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置。PATINDEX 可使用通配符,而 CHARINDEX 不可以。 这两个函数都带有2个参数: 1 希望获取其位置的模式。使用 PATINDEX,模式是可以包含通配符的字面字符串。使用 CHARINDEX,模式是字面字符串(不能包含通配符)。 2 字符串值表达式(通常为列名)。 例如:patindex('%aa%','ssaaa') 返回3 模糊从第三位开始匹配 patindex('%aa','ssddaa') 返回5 模糊从第五位开始匹配 patindex('%aa','ssddaaa') 返回6 模糊从第六位开始匹配 patindex('%aa%','ssddaaa') 返回5 模糊从第五位开始匹配 charindex(pattern,expression)精确匹配,返回第一个满足条件的下标 例如:charindex(aa,aas) 返回1 从第一位开始精确匹配 charindex(aa,saas) 返回2 从第二位开始精确匹配 charindex(aa,saaas) 返回2 从第二位开始精确匹配 charindex(aa,sas) 返回0 没有完全精确匹配的 函数多试试就知道其用法了,多实践
以上就是关于SQL server 如何截取特定字符第二次出现的前几位全部的内容,包括:SQL server 如何截取特定字符第二次出现的前几位、SQLserver中字符串查找功能patindex和charindex的区别、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)