1、 Oracle字符串操作
1)字符串类型: char类型和varchar2类型
(1)char类型
char类型存放的是定长字符,存不满补空格;
char最大取值是2000字节,也就是最多保存2000个英文字符/1000个汉汉字。
char可以不指定长度,默认为1;例如loc char等价于loc char(1).
(2)varchar2类型
varchar2类型存放的是变长字符,存多少占用多少。
varchar2最大取值是4000字节,也就是最多保存4000个英文字符/2000个汉字。
varchar2必须指定长度,如果loc varchar2这样写是错误的。
2)字符串函数
(1)concat和|| 函数
语法1:concat(str1,str2) 将两个字符串进行连接
concat(‘a’,’b’) ‘ab’
select * from emp; 查询emp表中的所有列
select ename,sal from emp; 查询emp表中ename和sal列
ename ‘:’ sal SMIYH:800 ALLEN:1600
concat(ename,’:’) ‘SMITH:’
select concat(ename,’:’) from emp; √
select concat(ename,’的工资是:’) from emp;
concat(ename,’的工资是:’) SMITH的工资是:
select concat(concat(ename,’的工资是:’),sal) from emp; SMITH的工资是:800
语法2:||等价于concat函数,str1||str2,将str1和str2连在一起。
select ename || ‘的工资是:’ || sal from emp;
select ename || ‘的提成是:’ || comm from emp;
强调:使用||或者concat将str1和str2进行连接,如果str1或者str2任何一个是null,相当于连接了一个空格。
(2) length函数:求字符串的长度
语法:length(str) 求str的长度
说明:str的类型如果是varchar2类型,求出的长度是字符串的实际长度;
name char(10) ‘abc ‘ length(name)->10
如果str的类型是char的类型,求出的长度还要包括后补的空格。
name varchar2(10) ‘abc’ length(name)->3
select ename, length(ename) from emp;
显示名字和名字的长度
(3) upper、lower、initcap函数
功能:大小写转换函数,用于转换字符的大小写
语法:upper(str)用于将字符转换为 大写 形式
lower(str)用于将字符转换为 小写 形式
initcap(str)用于将字符串中,每个单词 的 首字母大写
select ename,upper(ename),lower(ename),initcap(ename) from emp;
(4) trim、ltrim、rtrim函数
功能1:去掉空格
语法:trim(str)用于去掉str 两边 的空格
ltrim(str)用于去掉str 左边 的空格
rtrim(str)用于去掉str 右边 的空格
create table u2( insert into u2 values(1001,'abcd');
id number(4), insert into u2 values(1002,' bb ');
name char(10) select name || id from u2;
); select name || id,rtrim(name) || id from u2;
功能2:截掉字符串
语法:trim(c2 from c1) 从c1的前后(两边)截掉c2
ltrim(c1,c2) 从c1的左边截掉c2
rtrim(c1,c2) 从c1的右边截掉c2
insert into u2 values(1003,trim('a' from 'aba')); b
insert into u2 values(1004,ltrim('aba','a')); ba
(5) lpad rpad函数:补位函数
语法:lpad(str1,n,str2)左补位函数,在字符串str1的左边用str2补位,补足到n位。
rpad(str1,n,str2)右补位函数,在字符串str1的右边用str2补位,补足到n位。
(不是补几位,而是补足到n位!)
select ename,sal,lpad(sal,6,'¥') from emp;
(6) substr函数 – 截取函数
语法:substr(str,m,n)截取字符串str中从m开始,取n个字符的内容。
字符串的首位计算从1开始。
说明:如果m=0,则从首字符开始;0=1;
如果m的取值为负数,从尾部开始,倒着数 -1 -2 -3;
如果n没有设置值,或者n的长度超过了str的长度,则取值到str字符串的末尾为止。
insert into u2 values(1,substr('abcdefgh',3,4)); 1 cdef
insert into u2 values(2,substr('abcdefgh',0,4)); 2 abcd
insert into u2 values(3,substr('abcdefgh',-2,1)); 3 g
insert into u2 values(4,substr('abcdefgh',2,100)); 4 bcdefgh
(7) instr函数 :查找字符串所在的位置
语法1:instr(str1, str2, n, m)
查找字符串str2在源字符串str1中的位置,从n的位置开始搜索,
m表示第m次出现的位置。
‘abcdabcaerga’ a 3 2 查找a在‘abcdabcaerga’中出现的位置
从3的位置开始搜索,第2次出现a的位置就是要查找出的位置。
insert into u2(id) values(instr('abcdabcaerga','a',3,2)); 8
语法2:instr(str1, str2)
如果n和m不写,默认从1的位置开始搜索,第一次出现str2的位置。
insert into u2(id) values(instr('abcdabcaerga','a')); 1