处理字符串时,利用字符型函数的嵌套组合是非常有效的,试分析一道考题:
create table customers(cust_name varchar2(20));
insert into customers values(‘lex de hann’);
insert into customers values(‘renske ladwig’);
insert into customers values(‘jose manuel urman’);
insert into customers values(‘joson malin’);
select * from customers;
cust_name
——————–
lex de hann
renske ladwig
jose manuel urman
joson malin
一共四条记录,客户有两个名的,也有三个名的,现在想列出仅有三个名的客户,且第一个名字用*号略去
答案之一:
select lpad(substr(cust_name,instr(cust_name,’ ‘)),length(cust_name),’*’) “cust name”
from customers
where instr(cust_name,’ ‘,1,2)<>0;
cust name
————————————————————————————————————————
*** de hann
**** manuel urman
分析:
先用instr(cust_name,’ ‘)找出第一个空格的位置,
然后,substr(cust_name,instr(cust_name,’ ‘))从第一个空格开始往后截取字符串到末尾,结果是第一个空格以后所有的字符,
最后,lpad(substr(cust_name,instr(cust_name,’ ‘)),length(cust_name),’*’)用lpad左填充到cust_name原来的长度,不足的部分用*填充,也就是将第一个空格前的位置,用*填充。
where后过滤是否有三个名字,instr(cust_name, ‘ ‘,1,2)从第一个位置,从左往右,查找第二次出现的空格,如果返回非0值,则说明有第二个空格,则有第三个名字。