欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL 练习一 字符型函数

程序员文章站 2022-08-05 21:51:02
处理字符串时,利用字符型函数的嵌套组合是非常有效的,试分析一道考题: create table customers(cust_name varchar2(20)); insert into customers values('Lex De Hann'); insert into customers ......

处理字符串时,利用字符型函数的嵌套组合是非常有效的,试分析一道考题:

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值,则说明有第二个空格,则有第三个名字。