场景描述
先有一张表test,表字段value中存储了学生家庭地址、学号、姓名、年级这4个信息,且用“|”分隔开。现在需要将这4个信息分别提取出来
方法
substr()函数与instr()函数结合使用
涉及函数详述
1、substr
substr('str',start,n):对字符str从位置start开始,往后截取n个字符(字符串str字母下标从1开始)
2、instr
instr('str','value'):查找该字母在字符串首次出现的位置(字符串str字母下标从1开始)
instr('str','value',start,n):指定从start位置开始查找字符value出现第n次的位置(字符串str字母下标从1开始)
代码:
--查看表数据
select * from test;

select
--instr(value,'|',1,1)表示字符|第一次出现的位置,-1可以标记到前一个位置的字符(将这个位置作为截取字符的长度)
substr(value,1,instr(value,'|',1,1)-1) 地址,
--instr(value,'|',1,1)+1表示第一次出现|字符的后一个位置的字符(将这个位置作为开始查找位置)
--instr(value,'|',1,2)表示|出现第二次的位置,instr(value,'|',1,1)-1表示第一次|出现第一次的前一个字符的位置,两者相减用以计算这之间的间隔长度(将这个作为截取字符的长度)
substr(value,instr(value,'|',1,1)+1,instr(value,'|',1,2)-instr(value,'|',1,1)-1) 学号,
substr(value,instr(value,'|',1,2)+1,instr(value,'|',1,3)-instr(value,'|',1,2)-1) 姓名,
substr(value,instr(value,'|',1,3)+1,length(value)-instr(value,'|',1,3)) 年级
from test;

本文介绍了如何利用SQL中的substr和instr函数,结合|分隔符,从test表的value字段中提取学生家庭地址、学号、姓名和年级信息。
3483

被折叠的 条评论
为什么被折叠?



