ITPub博客

首页 > 数据库 > Oracle > oracle11中的char_function

oracle11中的char_function

原创 Oracle 作者:lff1530983327 时间:2014-12-23 15:55:53 0 删除 编辑

 

真是受不了字符函数的折磨了, 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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-11-12

  • 博文量
    72
  • 访问量
    49744