字符串类型
-
CHAR和VARCHAR类型,表示字符串数据类型,用来在表中存放字符串信息
-
CHAR存放定长字符,即存不满补空格,VARCHAR存放变长字符,存多少占用多少
CHAR和VARCHAR的存储编码:
-
默认单位是字节,可指定为字符
-
CHAR(10),等价于CHAR(10 BYTE)
-
指定单位为字符:CHAR(10 CHAR),5-10个字符,20个字节
-
VARCHAR(10),等价于VARCHAR(10 BYTE)
-
指定单位为字符:VARCHAR(10 CHAR),5-10个字符,20个字节
-
-
每个英文字符占用一个字节,每个中文字符按编码不同占用2-4个字节
CHAR和VARCHAR的最大长度
-
CHAR最大取值为2000字节,最多保存2000个英文字符,1000个汉字(GBK)
-
VARCHAR最大取值为4000字节,最多保存4000个英文字符,2000个汉字(GBK)
-
CHAR可以不指定长度,默认为1字节,VARCHAR必须指定长度
LONG和CLOB类型
-
LONG:VARCHAR加长版,存储边长字符串,最多达2G的字符串数据
-
LONG有很多限制:每个表只能有一个LONG类型字符,不能作为主键,不能建立索引,不能出现在查询条件中等
-
CLOB:存储定长或变长字符串,最多达4G的字符串数据
-
如:detail CLOB,detail字段的数据类型被定义为CLOB类型
字符串函数:CONCAT、||
-
CONCAT(char1,char2):返回两个字符串连接后的结果,可以嵌套连接多个字段
-
|| :可以直接用来连接多个字符串,如:char1||char2||…
-
如果某个字符串为NULL,相当于连接了一个空格
字符串函数:LENGTH(char)
-
返回字符串的长度
-
如果字符类型是VARCHAR,返回字符的实际长度,如果是CHAR,长度还要包括后补的空格
字符串函数:UPPER、LOWER、INITCAP
-
大小写转换函数,用来转换字符的大小写函数
-
UPPER(char):用于将字符转换为大写形式
-
LOWER(char):用于将字符转换为小写形式
-
INITCAP(char):用于将字符串中每个单词的首字符大写,其他字符小写,单词之间用空格分离
-
如果输入的参数是NULL值,仍然返回NULL值
字符串函数:TRIM、LTRIM、RTRIM
-
作用都是:截去字符串
-
TRIM(c2 FROM c1):从c1的左边右边同时截去c2,c2只能是一个字符
-
LTRIM(c1,c2):从c1的左边截去c2,c2可以是多个字符,当c2是多个字符时,c1左边开始的每个字符是c2中的字符其中之一,都会去除,遇到不是其中之一,则函数结束
-
RTRIM(c1,c2):从c1的右边截去c2,c2可以是多个字符,当c2是多个字符时,c1右边开始的每个字符是c2中的字符其中之一,都会去除,遇到不是其中之一,则函数结束
-
三个函数中如果没有c2,就去除空格
-
TRIM经常用来去除字符串前后的空格
字符串函数:LPAD、RPAD
-
LPAD(char1,n,char2):左补位函数
-
RPAD(char1,n,char2):右补位函数
-
补位函数,用于在字符串char1的左端或右端用char2补足到n为,char2可重复多次
-
当设定的位数小于数据的位数,则变成截取操作,将数据保留设定的数位(都是从左往右开始保留)
字符串函数:SUBSTR(char,m,n)
-
用于获取字符串的子串,返回char中从m位开始取n个字符,n可以不设置
-
如果m=0,则从首字符开始,如果m取负数,则从尾部开始
-
如果没有设置n,或者n的长度超过了char的长度,则取到字符串末尾为止
-
字符串的首位计数从1开始
字符串函数:INSTR(char1,char2,n,m)
-
返回子串char2在源字符串char1中的位置,n和m可以不设置
-
参数:
-
从n的位置开始搜索,若没有指定n,则从第1个字符开始搜索
-
m用于指定子串的第m次出现次数,如果不指定取值1
-
如果在char1中没有找到子串char2,返回0
-
演示:字符串函数
-
CONCAT
SELECT CONCAT(empno,ename) FROM emp;
SELECT CONCAT(CONCAT(ename,’,’),sal) FROM emp;
-
使用 ||
SELECT ename||’,’||sal FROM emp;
-
LENGTH
SELECT ename,LENGTH(ename) FROM emp;
- 特殊用法,查看数字长度
SELECT sal,LENGTH(sal) FROM emp;
- 特殊用法,查看数字长度
-
UPPER、LOWER、INITCAP
SELECT UPPER(‘heLloWorld’),LOWER(‘HELLOwOrld’),INITCAP(‘hello world’) FROM dual;
-
TRIM、LTRIM、RTRIM
SELECT TRIM(‘e’ FROM ‘esadwsoeefaoeeswe’) FROM dual;
SELECT TRIM('esadwsoeefaoeeswe ') FROM dual;
- 出现错误,TRIM左右只能去除一个字符
SELECT TRIM(‘es’ FROM ‘esadwsoeefaoeeswe’) FROM dual;
SELECT LTRIM(‘esadwsoeefaoeeswe’,‘e’),RTRIM(‘esadwsoeefaoeeswe’,‘e’) FROM dual;
SELECT LTRIM(‘esadwsoeefaoeeswe’,‘esw’),RTRIM(‘esadwsoeefaoeeswe’,‘esw’) FROM dual;
- 当左右两边遇到不是要去除的字符其中之一,则函数结束,下面的结果还是原字符串
SELECT LTRIM(‘esadwsoeefaoeeswe’,‘ass’),RTRIM(‘esadwsoeefaoeeswe’,‘bsw’) FROM dual;
- 出现错误,TRIM左右只能去除一个字符
-
LPAD、RPAD
SELECT LPAD(sal,5,’$’),RPAD(sal,5,’ ') FROM emp;
- 当设定的位数小于数据的位数,则变成截取操作,将数据保留设定的数位(都是从左往右)
SELECT LPAD(sal,3,’$’),RPAD(sal,3,’ ') FROM emp;
- 当设定的位数小于数据的位数,则变成截取操作,将数据保留设定的数位(都是从左往右)
-
SUBSTR 1234567890123456
SELECT SUBSTR(‘thinking in java’,13,4) FROM dual;
SELECT SUBSTR(‘thinking in java’,-4,4) FROM dual;
SELECT SUBSTR(‘thinking in java’,13) FROM dual;
-
INSTR 1234567890123456
SELECT INSTR(‘thinking in java’,‘in’) FROM dual;
SELECT INSTR(‘thinking in java’,‘in’,5) FROM dual;
SELECT INSTR(‘thinking in java’,‘in’,1,2) FROM dual;
SELECT INSTR(‘thinking in java’,‘in’,4,2) FROM dual;
-
查看SCOTT员工的信息
SELECT ename,sal,deptno FROM emp
WHERE ename=UPPER(‘scott’); -
查看名字只有5个字母的员工的名字,工资,部门号
SELECT ename,sal,deptno FROM emp WHERE LENGTH(ename)=5;
-
查看名字的第三个字母是A员工信息
SELECT * FROM emp WHERE SUBSTR(ename,3,1)=‘A’;
SELECT * FROM emp WHERE INSTR(ename,‘A’,3,1)=3;