字符串是由两个引号来定义的,而在两个引号中没有任何字符时,表示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个#号