截取指定字符串:
1.任务需求
假设数据库中:
某一列数据像这样,每个数据都有
同一个字符
“/”,这时如果我们需要获取这个字符的
前面
的字符串或后面
的字符串,应该用什么SQL语句呢?
如下面的一段字符串:
‘38-1006312/100B231/2016303029’
用的语法:
SUBSTRING ( expression, start, length ) --SUBSTRING('列名',起始位数,要取的字符串长度)
2.获取“/”
前面字符串:
--截取第一字符串
--语法: 列名(要操作的字符串) ,从第一位取值 ,要取的字符串长度是“/”字符在字段中的位置减1
select SUBSTRING('38-1006312/100B231/2016303029',1, CHARINDEX('/','38-1006312/100B231/2016303029')-1)
执行结果:
3.获取“/”
后面所有字符串:
--截取第一个'/'后面的字符串
-- 列名 , 从“/”字符后一位开始 , 要取的字符串长度是字段总长度减去“/”字符所在位置
select SUBSTRING(
'38-1006312/100B231/2016303029'
,CHARINDEX('/','38-1006312/100B231/2016303029')+1
, len('38-1006312/100B231/2016303029')-CHARINDEX('/','38-1006312/100B231/2016303029'))
执行结果:
这还不能算完结…
对于截取末尾"/"
字符后面的字符串,功能后续添加
好了,刚才充电回来:
获取最后
'/'
的末尾字符串
–查找最后出现的位置
select len(
‘38-1006312/100B231/2016303029’)-CHARINDEX(‘/’,REVERSE(‘38-1006312/100B231/2016303029’))+1
语法
--查找最后出现的位置
select len('38-1006312/100B231/2016303029')-CHARINDEX('/',REVERSE('38-1006312/100B231/2016303029'))+1
--注意自己的辨别与上面语句区别
select SUBSTRING('38-1006312/100B231/2016303029',len('38-1006312/100B231/2016303029')-CHARINDEX('/',REVERSE('38-1006312/100B231/2016303029'))+2,len('38-1006312/100B231/2016303029'))