oracle中length()、lengthb()、replace()、regexp_substr()函数使用
1. length()、lengthb():
lengthb(string)获取string所占的字节长度:返回字符串的长度,单位是字节
length(string)获取string所占的字符长度:返回字符串的长度,单位是字符
对于单字节字符,length()和lengthb()是一样的.
如可以用length(‘string’)=lengthb(‘string’)判断字符串是否含有中文。
注:一个汉字在Oracle数据库里占多少字节跟数据库的字符集有关,UTF8时,长度为三。
例:
select lengthb('我') from dual /*输出:3(表示我的数据库中一个汉字占3个字节)*/
select lengthb('我,a,b,c') from dual /*输出:9*/
select length('我,a,b,c') from dual /*输出:7*/
---------------------
[原作者:阿杜_ardo]
2. replace():
replace()函数是用另外一个值来替代串中的某个值。
格式如下所示:
REPLACE ( char, search_string [, replace_string])
如果没有指定replace_string 变量的值,那么当发现search_string 变量的值时,就将其删除。
例:
select replace('我,a,b,c',',','&') from dual /*指定替换值时输出:我&a&b&c*/
select replace('我,a,b,c',',') from dual /*不指定替换值时输出:我abc。(不指定时就将被替换值删除)*/
实例:获取字符串"aa,bb,cc,dd,ee,"的“长度”也就是有几个“值”
select length('aa,bb,cc,dd,ee,') val1 from dual /*先获取总长度*/
select length(replace('aa,bb,cc,dd,ee,',',')) val2 from dual /*然后用replace()获得去掉逗号的结果并获取其长度*/
select length('aa,bb,cc,dd,ee,')-length(replace('aa,bb,cc,dd,ee,',',')) val from dual /*两个长度相减即可获取我们要的结果*/
3.regexp_substr():
功能:在目标字符串中获取符合正则表达式的字符串。
语法:
REGEXP_SUBSTR(source_char, pattern [, position [, occurrence [, match_parameter ]]])
source_char:目标字符串
pattern:正则表达式
position:(可选)搜索开始位置,默认为1
occurrence:(可选)第n个匹配位置,默认为1
match_parameter:(可选)是取值范围
- i:大小写不敏感;
- c:大小写敏感;
- n:点号 . 不匹配换行符号;
- m:多行模式;
- x:扩展模式,忽略正则表达式中的空白字符。
例:
select regexp_substr('我,aa,BB,cc,','[^,]+',1,3,'c') from dual /*输出:BB (正则表达式意思是以逗号为分割标准)*/