oracle常用字符串函数

字符串是由两个引号来定义的,而在两个引号中没有任何字符时,表示NULL值。

一、字符串替换
replace和translate函数
replace和translate都是拥有字符替换的功能,replace是以字符串为单位,translate是以单个字符为单位。

语法:replace(‘目标字符串’, ‘待搜索字符串’, ‘替换字符串’)

select replace('123456abcdefg', 'abc', '00') from dual;

结果:12345600defg

语法:translate(‘目标字符串’, ‘待搜索字符’, ‘替换字符’)

select translate('123456abcdefg', 'a1f', '!@#') from dual;

结果:@23456!bcde#g
字符的对应关系:a -> !,1 -> @,f -> #

如果替换字符对应为空,则在目标字符串中去除搜索字符:

select translate('123456abcdefgZ', '#0123456789abcdefg', '#') from dual;

结果为Z。

可以用这个特点来检测一个字符串的字符是否在某个范围内,如果返回空,则字符串在目标字符范围内。
translate函数第三个参数不能为空,否则结果是NULL。replace函数第三个参数为空表示将待搜索的字符串去除。

二、字符串查找
insrt函数

语法:instr(‘目标字符串’, ‘待查找字符串’, ‘查找位置’, ‘查找第几次出现的’);

查找位置:默认为1,-1表示从后往前找
查找第几次出现的:找到某个字符串第n次出现的位置,默认为1

SQL> select instr('oracle123oracle456','ora') from dual;

INSTR('ORACLE123ORACLE456','ORA')
---------------------------------
				1

SQL> select instr('oracle123oracle456','ora',1,2) from dual;

INSTR('ORACLE123ORACLE456','ORA',1,2)
-------------------------------------
				   10

SQL> select instr('oracle123oracle456','ora',-1) from dual;

INSTR('ORACLE123ORACLE456','ORA',-1)
------------------------------------
				  10


///从后往前找第一个遇到的ora字符串,所以结果也是10

三、字符串截取
substr函数

语法:substr(‘待截取的字符串’, 偏移量, 截取的长度);
注意,截取的长度是包括偏移量这个位置本身的。第三个参数不写,默认截到字符串的最后。

select ename from emp order by substr(ename, length(ename)-1, 2);

四、字符串填充
rpad函数,从右边对字符串使用指定的字符进行填充

语法:rpad(‘被填充的字符串’,’返回字符串的长度’, ‘填充的内容’)

SQL> select rpad('#', 25, '#') from dual;

RPAD('#',25,'#')
-------------------------
#########################


///返回了25个#号,填充了24个#号