Skip to content

Commit 8c1efcb

Browse files
committed
update document instr function cn&en
1 parent 5b39efb commit 8c1efcb

File tree

2 files changed

+190
-68
lines changed

2 files changed

+190
-68
lines changed

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

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

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

317378
```
@@ -332,7 +393,7 @@ SELECT SUBSTRB('今天天气很好',5,8) "Substring with bytes" FROM DUAL;
332393
(1 row)
333394
```
334395

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

338399
```
@@ -353,7 +414,7 @@ select trim('aaa bbb ccc','aaa')trim from dual;
353414
(1 row)
354415
```
355416

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

359420
```
@@ -374,7 +435,7 @@ select ltrim('abcdefg','fegab')ltrim from dual;
374435
(1 row)
375436
```
376437

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

380441
```
@@ -395,7 +456,7 @@ select rtrim('abcdefg','fegab')rtrim from dual;
395456
(1 row)
396457
```
397458

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

401462
```
@@ -426,7 +487,7 @@ select length('ivorysql数据库') from dual;
426487
(1 row)
427488
```
428489
429-
19、兼容lengthb功能:求取指定字符串字节的长度,支持参数:char/bytea/varchar2测试用例如下:
490+
20、兼容lengthb功能:求取指定字符串字节的长度,支持参数:char/bytea/varchar2测试用例如下:
430491
查询'ivorysql'的字节长度:
431492
432493
```
@@ -457,7 +518,7 @@ select lengthb('ivorysql数据库'::varchar2) from dual;
457518
(1 row)
458519
```
459520

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

463524
```
@@ -478,7 +539,7 @@ select replace('jack and jue','j') from dual;
478539
(1 row)
479540
```
480541

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

484545
```
@@ -518,7 +579,7 @@ select regexp_replace('01234abcd56789','012','xxx')from dual;
518579
(1 row)
519580
```
520581

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

524585
```
@@ -568,7 +629,7 @@ select regexp_substr('数据库', '数据') from dual;
568629
(1 row)
569630
```
570631
571-
23、兼容regexp_instr函数,功能:用于标定符合正则表达式的字符子串的开始位置,支持参数:text, text,integer /text, text, integer, integer/ text, text, integer, integer, text/text, text, integer, integer, text, integer/ varchar2, varchar2,测试用例如下:
632+
24、兼容regexp_instr函数,功能:用于标定符合正则表达式的字符子串的开始位置,支持参数:text, text,integer /text, text, integer, integer/ text, text, integer, integer, text/text, text, integer, integer, text, integer/ varchar2, varchar2,测试用例如下:
572633
查询'abcaBcabc'中从第一个字符开始,出现abc子串的位置:
573634
574635
```
@@ -619,7 +680,7 @@ SELECT regexp_instr('数据库', '库');
619680
(1 row)
620681
```
621682

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

625686
```
@@ -669,7 +730,7 @@ select * from t_regexp_like where regexp_like(value,'ABC','i');
669730
670731
```
671732
672-
25、兼容to_number函数,功能:是将一些处理过的按一定格式编排过的字符串变回数值型的格式,支持参数:text/text,text测试用例如下:
733+
26、兼容to_number函数,功能:是将一些处理过的按一定格式编排过的字符串变回数值型的格式,支持参数:text/text,text测试用例如下:
673734
将字符串'-34,338,492'转换为数值型格式:
674735
675736
```
@@ -691,7 +752,7 @@ SELECT to_number('5.01-', '9.99S');
691752
(1 row)
692753
```
693754
694-
26、兼容to_char函数,功能:将数字或日期转换为字符类型,支持参数:date/date,text/timestamp/timestamp,text测试用例如下:
755+
27、兼容to_char函数,功能:将数字或日期转换为字符类型,支持参数:date/date,text/timestamp/timestamp,text测试用例如下:
695756
将当前系统日期转换为字符格式:
696757
697758
```
@@ -731,7 +792,7 @@ SELECT to_char(sysdate()::timestamp,'MM-YYYY-DD');
731792
(1 row)
732793
```
733794
734-
27、兼容to_date函数,功能:将字符类型转换为日期类型,支持参数:text/text,text测试用例如下:
795+
28、兼容to_date函数,功能:将字符类型转换为日期类型,支持参数:text/text,text测试用例如下:
735796
将'2023/07/06'转换为日期类型:
736797
737798
```
@@ -752,7 +813,7 @@ SELECT to_date('-44,0201','YYYY-MM-DD');
752813
(1 row)
753814
```
754815
755-
28、兼容to_timestamp函数,功能:可以存储年、月、日、小时、分钟、秒,同时还可以存储秒的小数部分。支持参数:text/text,text测试用例如下:
816+
29、兼容to_timestamp函数,功能:可以存储年、月、日、小时、分钟、秒,同时还可以存储秒的小数部分。支持参数:text/text,text测试用例如下:
756817
查询'2018-11-02 12:34:56.025'以日期形式输出:
757818
758819
```
@@ -773,7 +834,7 @@ SELECT to_timestamp('2011,12,18 11:38 ', 'YYYY-MM-DD HH24:MI:SS');
773834
(1 row)
774835
```
775836
776-
29、兼容to_timestamp_tz函数,功能:根据时间查询,时间字符串有T,Z并有毫秒,时区。测试用例如下:
837+
30、兼容to_timestamp_tz函数,功能:根据时间查询,时间字符串有T,Z并有毫秒,时区。测试用例如下:
777838
查询'2016-10-9 14:10:10.123000'以日期形式输出:
778839
779840
```
@@ -794,7 +855,7 @@ SELECT to_timestamp('2011,12,18 11:38 ', 'YYYY-MM-DD HH24:MI:SS');
794855
(1 row)
795856
```
796857
797-
30、兼容to_yminterval函数,功能:将一个字符串类型转化为年和月的时间差类型,支持参数:text, 测试用例如下:
858+
31、兼容to_yminterval函数,功能:将一个字符串类型转化为年和月的时间差类型,支持参数:text, 测试用例如下:
798859
查询'20110101'以后两个年零八个月后的日期:
799860
800861
```
@@ -805,7 +866,7 @@ select to_date('20110101','yyyymmdd')+to_yminterval('02-08') from dual;
805866
(1 row)
806867
```
807868

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

811872
```
@@ -816,7 +877,7 @@ select sysdate()+to_dsinterval('0 09:30:00')as newdate from dual;
816877
(1 row)
817878
```
818879
819-
32、兼容numtodsinterval函数,功能:将数字转换成时间间隔类型的数据。支持参数:double precision, text测试用例如下:
880+
33、兼容numtodsinterval函数,功能:将数字转换成时间间隔类型的数据。支持参数:double precision, text测试用例如下:
820881
转换100.00个小时为时间间隔类型数据:
821882
822883
```
@@ -837,7 +898,7 @@ SELECT NUMTODSINTERVAL(100, 'minute');
837898
(1 row)
838899
```
839900
840-
33、兼容numtoyminterval函数,功能:将数字转换成日期间隔类型的数据。
901+
34、兼容numtoyminterval函数,功能:将数字转换成日期间隔类型的数据。
841902
支持参数:double precision,text,测试用例如下:
842903
转换1.00,year为日期间隔:
843904
@@ -859,7 +920,7 @@ SELECT NUMTOYMINTERVAL(1,'month');
859920
(1 row)
860921
```
861922
862-
34、兼容localtimestamp函数,功能:返回会话中的日期和时间,支持参数:integer, 函数中增加参数为精度,测试用例如下:
923+
35、兼容localtimestamp函数,功能:返回会话中的日期和时间,支持参数:integer, 函数中增加参数为精度,测试用例如下:
863924
返回当前会话中的日期和时间:
864925
865926
```
@@ -880,7 +941,7 @@ select localtimestamp(1) from dual;
880941
(1 row)
881942
```
882943
883-
35、兼容from_tz函数,功能:将时间从一个时区转换为另一个时区,支持参数;timestamp, text ,测试用例如下:
944+
36、兼容from_tz函数,功能:将时间从一个时区转换为另一个时区,支持参数;timestamp, text ,测试用例如下:
884945
将'2000-03-28 08:00:00', '3:00'转换为当前时区:
885946
886947
```
@@ -891,7 +952,7 @@ SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', '3:00') FROM DUAL;
891952
(1 row)
892953
```
893954

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

897958
```
@@ -902,7 +963,7 @@ select sys_extract_utc(timestamp '2000-03-28 11:30:00.00 -8:00') from dual;
902963
(1 row)
903964
```
904965
905-
37、兼容sessiontimezone函数,功能:查看时区详细信息,测试用例如下:
966+
38、兼容sessiontimezone函数,功能:查看时区详细信息,测试用例如下:
906967
查看当前时区的详细信息:
907968
908969
```
@@ -925,7 +986,7 @@ select sessiontimezone() from dual;
925986
(1 row)
926987
```
927988
928-
38、兼容hextoraw函数,功能:将字符串表示的二进制数值转换为一个raw数值。支持参数:text,测试用例如下:
989+
39、兼容hextoraw函数,功能:将字符串表示的二进制数值转换为一个raw数值。支持参数:text,测试用例如下:
929990
将字符串'abcdef'转换为raw数值:
930991
931992
```
@@ -936,7 +997,7 @@ select hextoraw('abcdef')from dual;
936997
(1 row)
937998
```
938999

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

9421003
```
@@ -947,7 +1008,7 @@ select uid() from dual;
9471008
(1 row)
9481009
```
9491010
950-
40、兼容USERENV函数,功能:返回当前用户环境的信息,测试用例如下:
1011+
41、兼容USERENV函数,功能:返回当前用户环境的信息,测试用例如下:
9511012
查看当前用户是否是dba,如果是返回ture:
9521013
9531014
```
@@ -968,7 +1029,7 @@ select userenv('sessionid')from dual;
9681029
(1 row)
9691030
```
9701031
971-
41、兼容ASCIISTR函数,功能:传入字符串,返回对应的ASCII字符,测试用例如下:
1032+
42、兼容ASCIISTR函数,功能:传入字符串,返回对应的ASCII字符,测试用例如下:
9721033
只有ASCII字符:
9731034
```
9741035
select asciistr('Hello, World!') from dual;
@@ -995,7 +1056,7 @@ select userenv('sessionid')from dual;
9951056
(1 row)
9961057
```
9971058

998-
42、兼容TO_MULTI_BYTE函数, 功能:将字符串中的半角字符转换为全角字符:
1059+
43、兼容TO_MULTI_BYTE函数, 功能:将字符串中的半角字符转换为全角字符:
9991060
输入半角字符,转换为全角字符:
10001061
```
10011062
select to_multi_byte('1.2'::text) ;
@@ -1004,7 +1065,7 @@ select to_multi_byte('1.2'::text) ;
10041065
1.2
10051066
```
10061067
1007-
43、兼容TO_SINGLE_BYTE函数, 功能:将字符串中的半角字符转换为全角字符
1068+
44、兼容TO_SINGLE_BYTE函数, 功能:将字符串中的半角字符转换为全角字符
10081069
输入全角字符,转换为半角字符:
10091070
```
10101071
select to_single_byte('1.2');
@@ -1013,7 +1074,7 @@ select to_single_byte('1.2');
10131074
1.2
10141075
```
10151076

1016-
44、兼容COMPOSE函数,功能:将基本字符和组合标记组合一个复合Unicode字符:
1077+
45、兼容COMPOSE函数,功能:将基本字符和组合标记组合一个复合Unicode字符:
10171078
输入基本字符a和组合标记768, 返回法语à
10181079
```
10191080
select compose('a'||chr(768)) from dual;
@@ -1024,7 +1085,7 @@ select compose('a'||chr(768)) from dual;
10241085
```
10251086
10261087
1027-
45、兼容DECOMPOSE函数,功能:将复合Unicode字符(如带有重音或特殊符号的字符)分解为其基本字符和组合标记
1088+
46、兼容DECOMPOSE函数,功能:将复合Unicode字符(如带有重音或特殊符号的字符)分解为其基本字符和组合标记
10281089
输入法语é,返回基本字符e和组合标记301:
10291090
```
10301091
select asciistr(decompose('é')) from dual;

0 commit comments

Comments
 (0)