Skip to content

Commit 5f770f8

Browse files
authored
Merge pull request #156 from NotHimmel/master
update document instr function cn&en
2 parents 5b39efb + ceee5da commit 5f770f8

File tree

2 files changed

+192
-68
lines changed

2 files changed

+192
-68
lines changed

CN/modules/ROOT/pages/master/7.8.adoc

Lines changed: 96 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
|new_time
3939
|tz_offset
4040
|trunc
41+
|instr
4142
|instrb
4243
|substr
4344
|substrb
@@ -278,7 +279,68 @@ select trunc(sysdate(),'mm') from dual;
278279
(1 row)
279280
```
280281
281-
12、兼容instrb函数,功能:字符串查找函数,返回字符串的位置,支持参数: varchar2, text, number DEFAULT 1, number DEFAULT 1,以下为测试用例:
282+
12、兼容instr函数,功能:字符串查找函数,用于判断源字符串中是否包含目标字符串,并返回匹配位置。支持参数形式如下:
283+
284+
* `instr(string, str)`
285+
* `instr(string, str, start_position, nth_appearance)`
286+
287+
以下为测试用例:
288+
289+
默认情况下返回第一次匹配的位置:
290+
291+
```
292+
SELECT INSTR('database administration', 'data') FROM DUAL;
293+
instr
294+
-------
295+
1
296+
(1 row)
297+
```
298+
299+
指定起始位置和匹配序号:
300+
301+
```
302+
SELECT INSTR('database administration', 'i', 1, 2) FROM DUAL;
303+
instr
304+
-------
305+
15
306+
(1 row)
307+
```
308+
309+
支持从尾部开始的反向搜索:
310+
311+
```
312+
SELECT INSTR('mississippi river', 's', -5, 2) FROM DUAL;
313+
instr
314+
-------
315+
6
316+
(1 row)
317+
```
318+
319+
当未匹配到目标字符串时返回0:
320+
321+
```
322+
SELECT INSTR('database administration', 'z') FROM DUAL;
323+
instr
324+
-------
325+
0
326+
(1 row)
327+
```
328+
329+
`instr` 还能像 `like` 一样用于模糊查询:
330+
331+
```
332+
select * from tableName where instr(name,'helloworld')>0;
333+
```
334+
335+
函数实现说明:
336+
337+
* 查找一个字符串在另一个字符串中的位置,采用经典的暴力匹配算法。
338+
* 复用了 `text_instring` 函数。
339+
* 通过 `isByte` 参数判断当前数据库编码是否为多字节,并区分单字节与多字节处理逻辑。
340+
* 根据 `position` 的正负确定正向或反向搜索,并设置循环的起止位置和步长。
341+
* 在循环中逐字节移动并比较,与模式字符串匹配成功即返回相应位置。
342+
343+
13、兼容instrb函数,功能:字符串查找函数,返回字符串的位置,支持参数: varchar2, text, number DEFAULT 1, number DEFAULT 1,以下为测试用例:
282344
返回CORPORATE FLOOR中默认第一次出现OR时字符串的位置:
283345
284346
```
@@ -299,7 +361,7 @@ SELECT INSTRB('CORPORATE FLOOR','OR',5,2) "Instring in bytes" FROM DUAL;
299361
(1 row)
300362
```
301363
302-
13、兼容substr函数,功能:截取字符串函数,以字符为单位截取,支持参数:text, integer, 测试用例如下:
364+
14、兼容substr函数,功能:截取字符串函数,以字符为单位截取,支持参数:text, integer, 测试用例如下:
303365
截取’今天天气很好’中从第五个字符开始,往后的字符串:
304366
305367
```
@@ -311,7 +373,7 @@ SELECT SUBSTR('今天天气很好',5) "Substring with bytes" FROM DUAL;
311373
(1 row)
312374
```
313375

314-
14、兼容substrb函数,功能:截取字符串函数,以字节为单位截取,支持参数:varchar2, number/varchar2, number,number,测试用例如下:
376+
15、兼容substrb函数,功能:截取字符串函数,以字节为单位截取,支持参数:varchar2, number/varchar2, number,number,测试用例如下:
315377
截取’今天天气很好’中从第五个字节开始,往后的字符串:
316378

317379
```
@@ -332,7 +394,7 @@ SELECT SUBSTRB('今天天气很好',5,8) "Substring with bytes" FROM DUAL;
332394
(1 row)
333395
```
334396

335-
15、兼容trim函数,功能:去除指定字符串的左右空格或对应数据,支持参数:varchar2 /varchar2,varchar2,测试用例如下:
397+
16、兼容trim函数,功能:去除指定字符串的左右空格或对应数据,支持参数:varchar2 /varchar2,varchar2,测试用例如下:
336398
去除' aaa bbb ccc '的左右空格:
337399

338400
```
@@ -353,7 +415,7 @@ select trim('aaa bbb ccc','aaa')trim from dual;
353415
(1 row)
354416
```
355417

356-
16、兼容ltrim函数,功能:去除指定字符串的左侧空格或对应数据,支持参数:varchar2 /varchar2,varchar2,测试用例如下:
418+
17、兼容ltrim函数,功能:去除指定字符串的左侧空格或对应数据,支持参数:varchar2 /varchar2,varchar2,测试用例如下:
357419
去除' abcdefg '的左侧空格:
358420

359421
```
@@ -374,7 +436,7 @@ select ltrim('abcdefg','fegab')ltrim from dual;
374436
(1 row)
375437
```
376438

377-
17、兼容rtrim函数,功能:去除指定字符串的右侧空格,测试用例如下:
439+
18、兼容rtrim函数,功能:去除指定字符串的右侧空格,测试用例如下:
378440
去除' abcdefg '的右侧空格:
379441

380442
```
@@ -395,7 +457,7 @@ select rtrim('abcdefg','fegab')rtrim from dual;
395457
(1 row)
396458
```
397459

398-
18、兼容length函数,功能:求取指定字符串字符的长度,支持参数:char/integer/varchar2测试用例如下:
460+
19、兼容length函数,功能:求取指定字符串字符的长度,支持参数:char/integer/varchar2测试用例如下:
399461
查询223的字符长度:
400462

401463
```
@@ -426,7 +488,7 @@ select length('ivorysql数据库') from dual;
426488
(1 row)
427489
```
428490
429-
19、兼容lengthb功能:求取指定字符串字节的长度,支持参数:char/bytea/varchar2测试用例如下:
491+
20、兼容lengthb功能:求取指定字符串字节的长度,支持参数:char/bytea/varchar2测试用例如下:
430492
查询'ivorysql'的字节长度:
431493
432494
```
@@ -457,7 +519,7 @@ select lengthb('ivorysql数据库'::varchar2) from dual;
457519
(1 row)
458520
```
459521

460-
20、兼容replace函数,功能:替换指定字符串中的字符或删除字符,支持参数:text, text, text/varchar2, varchar2, varchar2 DEFAULT NULL::varchar2, 测试用例如下:
522+
21、兼容replace函数,功能:替换指定字符串中的字符或删除字符,支持参数:text, text, text/varchar2, varchar2, varchar2 DEFAULT NULL::varchar2, 测试用例如下:
461523
替换'jack and jue'中的'j'为'bl':
462524

463525
```
@@ -478,7 +540,7 @@ select replace('jack and jue','j') from dual;
478540
(1 row)
479541
```
480542

481-
21、兼容regexp_replace函数,此函数为replace函数的扩展。功能:用于通过正则表达式来进行匹配替换。支持参数:text, text, text /text, text, text, integer/varchar2, varchar2/varchar2, varchar2 varchar2, 测试用例如下:
543+
22、兼容regexp_replace函数,此函数为replace函数的扩展。功能:用于通过正则表达式来进行匹配替换。支持参数:text, text, text /text, text, text, integer/varchar2, varchar2/varchar2, varchar2 varchar2, 测试用例如下:
482544
将匹配到的数字替换为*#:
483545

484546
```
@@ -518,7 +580,7 @@ select regexp_replace('01234abcd56789','012','xxx')from dual;
518580
(1 row)
519581
```
520582

521-
22、兼容regexp_substr函数,功能:拾取合符正则表达式描述的字符子串,支持参数:text, text,integer /text, text, integer, integer/ text, text, integer, integer, text /varchar2 ,varchar2,测试用例如下:
583+
23、兼容regexp_substr函数,功能:拾取合符正则表达式描述的字符子串,支持参数:text, text,integer /text, text, integer, integer/ text, text, integer, integer, text /varchar2 ,varchar2,测试用例如下:
522584
查询'012ab34'中从第一个数开始的012字串:
523585

524586
```
@@ -568,7 +630,7 @@ select regexp_substr('数据库', '数据') from dual;
568630
(1 row)
569631
```
570632
571-
23、兼容regexp_instr函数,功能:用于标定符合正则表达式的字符子串的开始位置,支持参数:text, text,integer /text, text, integer, integer/ text, text, integer, integer, text/text, text, integer, integer, text, integer/ varchar2, varchar2,测试用例如下:
633+
24、兼容regexp_instr函数,功能:用于标定符合正则表达式的字符子串的开始位置,支持参数:text, text,integer /text, text, integer, integer/ text, text, integer, integer, text/text, text, integer, integer, text, integer/ varchar2, varchar2,测试用例如下:
572634
查询'abcaBcabc'中从第一个字符开始,出现abc子串的位置:
573635
574636
```
@@ -619,7 +681,7 @@ SELECT regexp_instr('数据库', '库');
619681
(1 row)
620682
```
621683

622-
24、兼容regexp_like函数,功能:与like类似,用于模糊查询。支持参数:varchar2, varchar2 /varchar2, varchar2 varchar2,
684+
25、兼容regexp_like函数,功能:与like类似,用于模糊查询。支持参数:varchar2, varchar2 /varchar2, varchar2 varchar2,
623685
首先创建一个regexp_like表用于测试用例查询:
624686

625687
```
@@ -669,7 +731,7 @@ select * from t_regexp_like where regexp_like(value,'ABC','i');
669731
670732
```
671733
672-
25、兼容to_number函数,功能:是将一些处理过的按一定格式编排过的字符串变回数值型的格式,支持参数:text/text,text测试用例如下:
734+
26、兼容to_number函数,功能:是将一些处理过的按一定格式编排过的字符串变回数值型的格式,支持参数:text/text,text测试用例如下:
673735
将字符串'-34,338,492'转换为数值型格式:
674736
675737
```
@@ -691,7 +753,7 @@ SELECT to_number('5.01-', '9.99S');
691753
(1 row)
692754
```
693755
694-
26、兼容to_char函数,功能:将数字或日期转换为字符类型,支持参数:date/date,text/timestamp/timestamp,text测试用例如下:
756+
27、兼容to_char函数,功能:将数字或日期转换为字符类型,支持参数:date/date,text/timestamp/timestamp,text测试用例如下:
695757
将当前系统日期转换为字符格式:
696758
697759
```
@@ -731,7 +793,7 @@ SELECT to_char(sysdate()::timestamp,'MM-YYYY-DD');
731793
(1 row)
732794
```
733795
734-
27、兼容to_date函数,功能:将字符类型转换为日期类型,支持参数:text/text,text测试用例如下:
796+
28、兼容to_date函数,功能:将字符类型转换为日期类型,支持参数:text/text,text测试用例如下:
735797
将'2023/07/06'转换为日期类型:
736798
737799
```
@@ -752,7 +814,7 @@ SELECT to_date('-44,0201','YYYY-MM-DD');
752814
(1 row)
753815
```
754816
755-
28、兼容to_timestamp函数,功能:可以存储年、月、日、小时、分钟、秒,同时还可以存储秒的小数部分。支持参数:text/text,text测试用例如下:
817+
29、兼容to_timestamp函数,功能:可以存储年、月、日、小时、分钟、秒,同时还可以存储秒的小数部分。支持参数:text/text,text测试用例如下:
756818
查询'2018-11-02 12:34:56.025'以日期形式输出:
757819
758820
```
@@ -773,7 +835,7 @@ SELECT to_timestamp('2011,12,18 11:38 ', 'YYYY-MM-DD HH24:MI:SS');
773835
(1 row)
774836
```
775837
776-
29、兼容to_timestamp_tz函数,功能:根据时间查询,时间字符串有T,Z并有毫秒,时区。测试用例如下:
838+
30、兼容to_timestamp_tz函数,功能:根据时间查询,时间字符串有T,Z并有毫秒,时区。测试用例如下:
777839
查询'2016-10-9 14:10:10.123000'以日期形式输出:
778840
779841
```
@@ -794,7 +856,7 @@ SELECT to_timestamp('2011,12,18 11:38 ', 'YYYY-MM-DD HH24:MI:SS');
794856
(1 row)
795857
```
796858
797-
30、兼容to_yminterval函数,功能:将一个字符串类型转化为年和月的时间差类型,支持参数:text, 测试用例如下:
859+
31、兼容to_yminterval函数,功能:将一个字符串类型转化为年和月的时间差类型,支持参数:text, 测试用例如下:
798860
查询'20110101'以后两个年零八个月后的日期:
799861
800862
```
@@ -805,7 +867,7 @@ select to_date('20110101','yyyymmdd')+to_yminterval('02-08') from dual;
805867
(1 row)
806868
```
807869

808-
31、兼容to_dsinterval函数,功能:将一个日期加上一定的小时或者天数变成另外一个日期,支持参数:text,测试用例如下:
870+
32、兼容to_dsinterval函数,功能:将一个日期加上一定的小时或者天数变成另外一个日期,支持参数:text,测试用例如下:
809871
查询当前系统时间加上9个半小时后的日期(当前为2023-07-06,18:00):
810872

811873
```
@@ -816,7 +878,7 @@ select sysdate()+to_dsinterval('0 09:30:00')as newdate from dual;
816878
(1 row)
817879
```
818880
819-
32、兼容numtodsinterval函数,功能:将数字转换成时间间隔类型的数据。支持参数:double precision, text测试用例如下:
881+
33、兼容numtodsinterval函数,功能:将数字转换成时间间隔类型的数据。支持参数:double precision, text测试用例如下:
820882
转换100.00个小时为时间间隔类型数据:
821883
822884
```
@@ -837,7 +899,7 @@ SELECT NUMTODSINTERVAL(100, 'minute');
837899
(1 row)
838900
```
839901
840-
33、兼容numtoyminterval函数,功能:将数字转换成日期间隔类型的数据。
902+
34、兼容numtoyminterval函数,功能:将数字转换成日期间隔类型的数据。
841903
支持参数:double precision,text,测试用例如下:
842904
转换1.00,year为日期间隔:
843905
@@ -859,7 +921,7 @@ SELECT NUMTOYMINTERVAL(1,'month');
859921
(1 row)
860922
```
861923
862-
34、兼容localtimestamp函数,功能:返回会话中的日期和时间,支持参数:integer, 函数中增加参数为精度,测试用例如下:
924+
35、兼容localtimestamp函数,功能:返回会话中的日期和时间,支持参数:integer, 函数中增加参数为精度,测试用例如下:
863925
返回当前会话中的日期和时间:
864926
865927
```
@@ -880,7 +942,7 @@ select localtimestamp(1) from dual;
880942
(1 row)
881943
```
882944
883-
35、兼容from_tz函数,功能:将时间从一个时区转换为另一个时区,支持参数;timestamp, text ,测试用例如下:
945+
36、兼容from_tz函数,功能:将时间从一个时区转换为另一个时区,支持参数;timestamp, text ,测试用例如下:
884946
将'2000-03-28 08:00:00', '3:00'转换为当前时区:
885947
886948
```
@@ -891,7 +953,7 @@ SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', '3:00') FROM DUAL;
891953
(1 row)
892954
```
893955

894-
36、兼容sys_extract_utc函数,功能:将一个timestamptz转换为UTC时区时间。支持参数:timestamp with time zone 测试用例如下:
956+
37、兼容sys_extract_utc函数,功能:将一个timestamptz转换为UTC时区时间。支持参数:timestamp with time zone 测试用例如下:
895957
查询转换timestamp '2000-03-28 11:30:00.00 -8:00'为UTC时区后的时间:
896958

897959
```
@@ -902,7 +964,7 @@ select sys_extract_utc(timestamp '2000-03-28 11:30:00.00 -8:00') from dual;
902964
(1 row)
903965
```
904966
905-
37、兼容sessiontimezone函数,功能:查看时区详细信息,测试用例如下:
967+
38、兼容sessiontimezone函数,功能:查看时区详细信息,测试用例如下:
906968
查看当前时区的详细信息:
907969
908970
```
@@ -925,7 +987,7 @@ select sessiontimezone() from dual;
925987
(1 row)
926988
```
927989
928-
38、兼容hextoraw函数,功能:将字符串表示的二进制数值转换为一个raw数值。支持参数:text,测试用例如下:
990+
39、兼容hextoraw函数,功能:将字符串表示的二进制数值转换为一个raw数值。支持参数:text,测试用例如下:
929991
将字符串'abcdef'转换为raw数值:
930992
931993
```
@@ -936,7 +998,7 @@ select hextoraw('abcdef')from dual;
936998
(1 row)
937999
```
9381000

939-
39、兼容uid函数,功能:获取数据库的实例名。测试用例如下:
1001+
40、兼容uid函数,功能:获取数据库的实例名。测试用例如下:
9401002
获取当前数据库的实例名:
9411003

9421004
```
@@ -947,7 +1009,7 @@ select uid() from dual;
9471009
(1 row)
9481010
```
9491011
950-
40、兼容USERENV函数,功能:返回当前用户环境的信息,测试用例如下:
1012+
41、兼容USERENV函数,功能:返回当前用户环境的信息,测试用例如下:
9511013
查看当前用户是否是dba,如果是返回ture:
9521014
9531015
```
@@ -968,7 +1030,7 @@ select userenv('sessionid')from dual;
9681030
(1 row)
9691031
```
9701032
971-
41、兼容ASCIISTR函数,功能:传入字符串,返回对应的ASCII字符,测试用例如下:
1033+
42、兼容ASCIISTR函数,功能:传入字符串,返回对应的ASCII字符,测试用例如下:
9721034
只有ASCII字符:
9731035
```
9741036
select asciistr('Hello, World!') from dual;
@@ -995,7 +1057,7 @@ select userenv('sessionid')from dual;
9951057
(1 row)
9961058
```
9971059

998-
42、兼容TO_MULTI_BYTE函数, 功能:将字符串中的半角字符转换为全角字符:
1060+
43、兼容TO_MULTI_BYTE函数, 功能:将字符串中的半角字符转换为全角字符:
9991061
输入半角字符,转换为全角字符:
10001062
```
10011063
select to_multi_byte('1.2'::text) ;
@@ -1004,7 +1066,7 @@ select to_multi_byte('1.2'::text) ;
10041066
1.2
10051067
```
10061068
1007-
43、兼容TO_SINGLE_BYTE函数, 功能:将字符串中的半角字符转换为全角字符
1069+
44、兼容TO_SINGLE_BYTE函数, 功能:将字符串中的半角字符转换为全角字符
10081070
输入全角字符,转换为半角字符:
10091071
```
10101072
select to_single_byte('1.2');
@@ -1013,7 +1075,7 @@ select to_single_byte('1.2');
10131075
1.2
10141076
```
10151077

1016-
44、兼容COMPOSE函数,功能:将基本字符和组合标记组合一个复合Unicode字符:
1078+
45、兼容COMPOSE函数,功能:将基本字符和组合标记组合一个复合Unicode字符:
10171079
输入基本字符a和组合标记768, 返回法语à
10181080
```
10191081
select compose('a'||chr(768)) from dual;
@@ -1024,7 +1086,7 @@ select compose('a'||chr(768)) from dual;
10241086
```
10251087
10261088
1027-
45、兼容DECOMPOSE函数,功能:将复合Unicode字符(如带有重音或特殊符号的字符)分解为其基本字符和组合标记
1089+
46、兼容DECOMPOSE函数,功能:将复合Unicode字符(如带有重音或特殊符号的字符)分解为其基本字符和组合标记
10281090
输入法语é,返回基本字符e和组合标记301:
10291091
```
10301092
select asciistr(decompose('é')) from dual;

0 commit comments

Comments
 (0)