6.表:字符串

字符串类型

  • 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;
  • 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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值