oraclereplace函数_oracle数据库基础——统计字符串中特定
字符串总数的⽅法
1.在Oracle11g及以上版本可以使⽤regexp_count关键字
语法: regexp_count(source_str, target_char [, position [, match_param]])
source_str:包含特定字符的字符串
target_char:特定字符
position: 从哪个下标开始搜索,可省略,但需>=1
match_param: 正则的匹配模式参数, 'i':忽略⼤⼩写; ‘c’或不配置该参数:不忽略⼤⼩写;此外还有‘n’、‘m’、‘x’等参数。select regexp_count('abcdefgaaa','a') from dual
regexp_count关键字
2.使⽤translate关键字
语法:translate(source_str, from_str, to_str)
source_str:待处理的字符串
from_str:需要转义的字符拼接⽽成的串
to_str:转义后的字符拼接⽽成的串
解释:
(1). 三个字符串中任意⼀个为null,其结果都是null
(2). from_str和to_str的对应关系,从左往右⽤⼀⼀对应, 对于在from_str中出现的重复字符,
且重复字符的下标在to_str该下标有值时,会同时忽略重复字符在from_str和to_str下标的值。
既重复字符以第⼀次出现的替换规则为准。
(3). from_str的长度⼤于to_str的长度时,对于from_str中多出来的字符可以理解为将其转换为空字符串。
字符串replace函数多于字符串中已经有转义映射关系的字符,按照之前的映射关系转义。
(4). 按照转义规则替换source_str中的字符,并得到最终的结果。
(以上解释⽐较绕,可以简单的将from_str和to_str看做等长,长度不够的位⽤空字符代替,然后再转义source_str)
select translate('abcdeaa','a','c') from dual
select length(translate('abcdeaaabc','a'||'abcdeaaabc','a')) from dual
translate关键字
select length(translate(',abc,,,d,,ef,', ',' || ',abc,,,d,,ef,', ',')) from dual;
select length(',abc,,,d,,ef,') - length(replace(',abc,,,d,,ef,', ',','')) from dual
3.使⽤regexp_replace函数将⽬标字符串中的特定字符串替换为空,然后⽤⽬标字符串的长度-替换后字符串的长度,即为特定字符串的长度。
select (length('@-ab@@cd--ef@h-j') - length(regexp_replace('@-ab@@cd--ef@h-j','@-'))) / length('@-') from dual;
select length('@-ab@@cd--ef@h-j') from dual --16
select length(regexp_replace('@-ab@@cd--ef@h-j','@-')) from dual --14 --删除特定字符串后的长度
Oracle⾥的执⾏计划——使⽤explain plan命令
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论