oracle的instr()函数

我们知道很多语言都提供了indexOf()和lastIndexOf()函数,以便能查找某个字符在某个字符串中的出现的位置和最后一次出现的位置。

但是Oracle没有提供这两个函数,事实上,它提供了一个INSTR()函数,这个函数其实功能要强大得多。

INSTR()函数的语法:

-- instr(源字符串, 目标字符串 [, 起始位置 [, 匹配序号]])
instr(str1, str2 [, start_position [, nth_appearance]]) 

没有错,它可以用来查字符串的,不是单单查单个字符。

SELECT INSTR('HELLOWORLD', 'L') FROM DUAL; -- 3  默认第一次出现L的位置
SELECT INSTR('HELLOWORLD', 'LO') FROM DUAL; -- 4 在LO中的L开始出现的位置
SELECT INSTR('HELLOWORLD', 'WO') FROM DUAL; -- 6 在WO中的W开始出现的位置

SELECT INSTR('HELLOWORLD', 'L', 2, 2) FROM DUAL; -- 4 在HELLOWORLD的第2(E)号位置开始,查找第二次出现的L的位置
SELECT INSTR('HELLOWORLD', 'L', 3, 2) FROM DUAL; -- 4 在HELLOWORLD的第3(L)号位置开始,查找第二次出现的L的位置
SELECT INSTR('HELLOWORLD', 'L', 4, 2) FROM DUAL; -- 9 在HELLOWORLD的第4(L)号位置开始,查找第二次出现的L的位置
SELECT INSTR('HELLOWORLD', 'L', -1, 1) FROM DUAL; -- 9 在HELLOWORLD的倒数第1(D)号位置开始,往回查找第一次出现的L的位置
SELECT INSTR('HELLOWORLD', 'L', -2, 2) FROM DUAL; -- 4 在HELLOWORLD的倒数第1(D)号位置开始,往回查找第二次出现的L的位置
SELECT INSTR('HELLOWORLD', 'L', 2, 3) FROM DUAL; -- 9 在HELLOWORLD的第2(E)号位置开始,查找第三次出现的L的位置
SELECT INSTR('HELLOWORLD', 'L', -2, 3) FROM DUAL; -- 3 在HELLOWORLD的倒数第2(L)号位置开始,往回查找第三次出现的L的位置

INSTR()函数有时候也可以用来替代模糊查询。

SELECT * FROM TABLE WHERE NAME LIKE '%HELLOWORLD%';
SELECT * FROM TABLE WHERE INSTR(NAME, 'HELLOWORLD') > 0;

这两个语句的实现效果是一样的。

多用用,你就能感受到这个函数的强大,那些什么indexOf()或lastIndexOf()都是弟弟。

"为谁如花美眷,似水流年。"

原文地址:https://www.cnblogs.com/yanggb/p/10820221.html