首页 > 数据库 > Oracle > oracle11中的char_function
真是受不了字符函数的折磨了, l_Str := Trim(Rtrim(Replace(Replace(p_Str, ';', ','), ' ', ''), ',')) , LV_TEMP := SUBSTR(LV_STR, 0, INSTR(LV_STR, FV_SPLITER) - 1)
SUBSTR(LV_STR, INSTR(LV_STR, FV_SPLITER) + 1,
LENGTH(LV_STR));每次看到像这样几个字符函数一起来袭,然后我就晕了!所以我要把它详详细细的记下来!
就平时接触的字符集函数来说,我用到最多的应该是substr了,所以从它说起吧!
1.SUBSTR
substr(string,start_position,subtract_length)
select substr('56@7325@1400@',1,3) from dual;-------56@
可以看出来substr只是单纯的实现从第几位开始截取,然后截取几位。
select regexp_substr('56@7325@1400@','[[:alnum:]]+',1,2) from dual;-----------7325
regexp_substr('56@7325@1400@','[[:alnum:]]+',1,2) 各参数意义:源字符集,匹配的字符集,开始匹配的位置,第几次匹配,__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
regexp_substr则是传说中的正则分割,可以实现将匹配的字符与前匹配字符之间的字符截取出来。
2.INSTR
select instr('56@7325@1400@',0,1,2) from dual;------12
各参数意义:源字符集,匹配的字符集,开始匹配的位置,第几次匹配,结果为该匹配的字符所在的位置号
select regexp_instr('56@7325@1400@','[[:digit:]]+',1,3) from dual;------4
各参数意义:源字符集,匹配的字符集,开始匹配的位置,第几次匹配,结果为该匹配的字符所在的位置号(还有return_option以及match_parameter等参数,一般默认)
REGEXP_INSTR实现的功能与INSTR类似,不同的是REGEXP_INSTR用一个匹配模式代替了具体的字符串,这样就提供了更大的灵活性。
顺带感受一下正则表达式的威力:
select regexp_substr('56@7325@1400@1','[[:digit:]]$',1,2) from dual;-----------NULL
select regexp_substr('56@7325@1400@1','[[:digit:]]',1,2) from dual;------------6
select regexp_substr('56@7325@1400@1','[[:digit:]]+',1,2) from dual;-----------7325
select regexp_instr('56@7325@1400@1','[[:digit:]]$',1,1) from dual;-----------14
select regexp_instr('56@7325@1400@1','[[:digit:]]',1,3) from dual;------------4
select regexp_instr('56@7325@1400@1','[[:digit:]]+',1,2) from dual;-----------1,2,3,4对应的分别是1,4,9,14
[[:alnum:]]+ 表示一个或多个字符
[[:alnum:]]* 表示匹配0个或者多个字母或数字字符
[[:digit:]]+$ 表示匹配1个或者多个数字结尾的字符
.^代表开始,*表示出现0次或多次,+表示出现1次或多次,[:digit:]代表0-9的纯数字(还有$代表以什么结尾,如果是[[:digit:]]+$代表以数字结尾)。
3.REPLACE
select replace ('56@7325@1400@1','@',1)from dual;-----56173251140011
select regexp_replace ('56@7325@1400@1','[^[:alnum:]]',1)from dual;-----56173251140011
select regexp_replace ('56@7325@1400@1','[[:punct:]]',1)from dual;-----56173251140011
select regexp_replace ('56@7325@1400@1','[[:digit:]]',1)from dual;-----11@1111@1111@1
select regexp_replace ('56@7325@1400@1','[[:alnum:]]+',1)from dual;-----1@1@1@1
select regexp_replace ('56@7325@1400@1','[[:alnum:]]*',1)from dual;-----11@11@11@11
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
4.TRIM
select LENGTH(trim (trailing from ' 123 ')) from dual;----4
select LENGTH(trim (leading from ' 123 ')) from dual;---7
使用“TRAILING”参数可以完成字符串尾部空格的删除功能;而“LEADING”参数正好相反,完成字符串头部空格的删除功能。
select ltrim ('xxxx123xxx','x')from dual;-------123xxx
SELECT RTRIM('45123321HELLO===321', '123') FROM DUAL;-----45123321HELLO===
SELECT LTRIM('123321HELLO===', '123') FROM DUAL;-----HELLO===
5.LPAD
SELECT LPAD('xxxx123xxx',10,'*************')FROM DUAL;-----**********xxxx123xxx
SELECT LPAD('xxxx123xxx',6,'*************')FROM DUAL;------xxxx12
参数意义:源字符集,要返回的长度,被填充进去的字符
最后吼吼:l_Str := Trim(Rtrim(Replace(Replace(p_Str, ';', ','), ' ', ''), ',')) 所以这段字符串的意思就是:去掉p_str中的空格,然后将分号改成逗号,然后从右边截取左右的空格之后再做处理!呼呼。。。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30018455/viewspace-1377382/ ,如需转载,请注明出处,否则将追究法律责任。