instr函数是一个出场率很高的函数,它相当于excel中的find函数,返回一个字符串在另一个字符串中的位置。
其语法为:instr(查找的起始位置,"字符串1","字符串2",比较形式)
1、查找的起始位置:如果省略,则默认从字符串1的第一个字符开始查找字符串2;
2、字符串1:被查找的字符串
3、字符串2:要查找的字符串(查找条件)
4、比较形式,文本比较(1)和二进制比较(0),用来区别字母大小写。
【1】select instr("小李飞刀","李") as 字符位置
"李"在"小李飞刀"的第2个位置,则返回2
【2】select instr(3,"小李飞刀","李") as 字符位置
从"小李飞刀"第3个字符开始查找"李",则返回0.凡是查找不到结果的,都会返回0.
【3】select instr("abcd","B") as 字符位置
默认不区分大小写
select instr("aBcd","b") as 字符位置
【4】如果未指定文本的比较类型,则默认是文本比较。使用第4参数时,第1参数不能省略,即使为1.
select instr(1,"aBcd","b",0) as 字符位置
select instr(1,"aBcd","b",1) as 字符位置
【5】提取"/"后面的数字
select mid(名称,instr(名称,"/")+1,99) as 数值 from [sheet6$a1:a]
【6】提取下表中三国人物的数据
select * from [sheet5$] where instr("大乔刘备刘禅小乔",姓名)>0
【7】instr和like特定情况下往往可以互用。
如在【6】的表格中提取姓刘的数据
select * from [sheet5$] where instr(姓名,"刘")>0
或
select * from [sheet5$] where 姓名 like "刘%"
都能够得出同样的数据。
【8】instr用于自定义排序
如按照姓名升序排序
select * from [sheet3$] order by 姓名
按照姓名降序排序
select * from [sheet3$] order by 姓名 desc
先增加几条数据,将姓名按照庄周、韩信、典韦、李白自定义排序
select * from [sheet3$] order by instr("庄周韩信典韦李白",姓名)
instr能实现自定义排序,是利用其返回字符位置的特点。
如庄周,在"庄周韩信典韦李白"中返回位置1,所以排第1。
又如韩信,在"庄周韩信典韦李白"中返回位置3,所以排第2,因为没有位置2。
依次类推,就确定了每个姓名的位置,实现自定义排序。