工作中较常用的是寻找字符串, 判断位置,替换.
1. 查找字符串 : INSTR
语法: INSTR(string,subString,position,ocurrence)
解释:
string:源字符串
subString:要查找的子字符串
position:查找的开始位置
ocurrence:源字符串中第几次出现的子字符串
这里的position和ocurrence是可以省略的.
如: 查询字符串里含有"aaa"即条件成立:
IF INSTR('abcdefgaaa','aaa') > 0 THEN
.....
END IF;
也可以使用定位, 如常的判断以什么结尾, 或者以为什么开头的, 知道指定位置的查询:
IF INSTR(t_staging_column_basepk,',',length(t_staging_column_basepk)) >0 THEN
t_staging_column_basepk := ltrim(t_staging_column_basepk) ||t_staging_column_logpk;
ELSE
t_staging_column_basepk := ltrim(t_staging_column_basepk)||','||t_staging_column_logpk;
END IF;
2. 拼接字符串 : ||
经常用到拼接字符串, 这里需要使用两个竖线 || 来连接字符串. 字符串用单引号来定义. 如:
'abc' || 'def' = abcdef
3. 截取字符串 : substr
语法: SUBSTR(string,start_position,[length]) 求子字符串,返回字符串
解释:
string 源字符串
start_position 开始位置(从0开始)
length 可选项,子字符串的个数
这里可以结果instr来确定位置, 如:从找到table里里的"."数字开始+1往后截取所有字符:
table_name := substr(i_base_table_name,instr(i_base_table_name,'.',-1)+1);
也可以按指定位置截取指定字符数:
substr("ABCDEFG", 0, 3); //返回:ABC,截取从A开始3个字符
4.替换字符串, decode, replace
语法 : decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
解释:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
如:
'decode(src,''I'',''ADD'',''U'',''UPD'',''D'',''DEL'')'
这个方法很有意思, 将一个字符串上指定的值换成另外一个值. 系统会根据","的个数来判断哪个是源, 哪个是目标替换的新值.除第一个src以外, 从str1开始, 奇数是源, str2偶数是目的新值.这个例子的就是如果src的值是I,替换成ADD,如果值是U 替换也UPD.以此类推.
另外一种replace方法:
语法: replace(strSource, str1, str2) 将strSource中的str1替换成str2
解析:strSource:源字符串
str1: 要替换的字符串
str2: 替换后的字符串
select '替换字符串' as oldStr, replace('替换字符串', '替换', '修改') as newStr from dual
5. 判断字符串的长度 : length , lengthb
语法及释义:
length(string)计算string所占的字符长度:返回字符串的长度,单位是字符
lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节
select length('飘') from dual
select lengthb('飘') from dual
6. 判断字符串为空时,返回新值 : NVL(), NVL2()
语法: nvl(string1, replace_with)
解释: 如果string1为null,那么这个函数返回 replace_with 所代表的值.
例子:
nvl(to_char(some_numeric),’some string’) --其中some_numeric指某个数据类型的值。
nvl(yan,0) 的意思是如果yan是null, 则取0值。
语法: nvl2()(E1, E2, E3)
解释: 它的功能是如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。
例子: 如果testVariable为null,返回-1, 否则返回888.
nvl(testVariable,888,-1)