Oracle入门学习系列笔记(三)之字符串操作
文章目录
说明: 本文档为本人学习Oracle过程中整理的相关笔记,供大家学习时参考,如有不妥之处,请大家指正
介绍
Oracle中表示字符串常用的两种类型为CHAR和VARCHAR2,本文介绍的是这两种类型的相关特性及相关函数操作
CHAR 和 VARCHAR2
类型
- CHAR 存放定长的字符,当存储的字符串的实际长度没有达到定义的长度时,会自动右补空格
- VARCHAR2 存放变长的字符串,以实际存储的长度占用字节数
- 例如:在数据库中保存 ‘JACKDAVID’ 字符串
- CHAR(50): 9个字母,补齐41个空格,实际占用50
- VARCHAR2(100):10个字母,实际占用10
存储编码
-
默认的存储单位是字节,也可以指定为字符
- CHAR(10),等价于CHAR(10 BYTE)
- 指定单位为字符:CHAR(10 CHAR),占用20个字节
- VARCHAR2(10),等价于VARCHAR2(10 BYTE)
- 指定单位为字符:VARCHAR2(10 CHAR),占用20个字节
-
每个英文字符占用一个字节,每个中文字符按照编码方式的不同,占用2-4个字节
- GBK:2个字节
- UTF-8:2-4个字节
最大长度
-
CHAR 最大取值为2000字节
- 最多保存2000个英文字符,1000个汉字(GBK)
-
VARCHAR2 最大取值为4000字节
- 最多保存4000个英文字符,2000个汉字(GBK)
-
CHAR 可以不指定长度,默认为1,VARCHAR2 必须指定长度
LONG和CLOB类型
LONG类型
- LONG 是VARCHAR2 的加长版,存储变长字符串,最多可以存储2GB的字符串数据
- LONG 有诸多限制:
- 每个表中只能有一个LONG类型的列
- 不能作为主键
- 不能建立索引
- 不能出现在查询条件中
CLOB类型
- 存储定长或变长字符串,最多可以存储4GB的字符串数据
- ORACLE 建议开发中使用CLOB代替LONG类型
字符串函数
CONCAT和 “||”
-
CONCAT(char1,char2)
- 返回两个字符串连接后的结果,两个参数char1,char2是要连接的两个字符串,可以是数据库中的列名称,也可以是实际值
-
等价操作 :连接操作符
-
如果char1和char2任何一个为NULL,相当于连接了一个空格
-
例如: 如下的两条语句的执行结果是一样的
select concat(‘Hello’,’ World!’) AS MSG from dual;
select ‘Hello’ || ’ World!’ AS MSG from dual;
LENGTH
-
LENGTH(CHAR)
- 返回字符串的长度
-
如果字符串类型是VARCHAR2,返回字符串的实际长度,如果字符类型是CHAR,长度还要包括后补的空格
-
例如:
select PHONE_NO,LENGTH(PHONE_NO) from DAVID.STU_INF;
UPPER、LOWER和INITCAP
-
大小写转换函数,用来转换字符的大小写
-
UPPER(CHAR) 用于将字符串转为大写形式
-
LOWER(CHAR) 用于将字符串转为小写形式
-
INITCAT(CHAR) 用于将字符串中每个单词的首字符大写,其他字符小写,单词之间用空格和非字母字符分隔
-
如果输入的参数是NULL值,仍然返回NULL值
-
例如: 如下的SQL脚本的执行结果
SELECT UPPER('hello world') AS UP,LOWER('HELLO WORLD') AS LO,INITCAP('hello world') AS INI from dual;
TRIM,LTRIM,RTRIM
-
作用:截去字符串
-
语法形式:
- TRIM (c2 from c1) 从c1的前后端截去c2
- LTRIM (c1,[c2]) 从c1的左边截去c2
- RTRIM(c1,[c2]) 从c1的右边截去c2
-
例如: 执行结果如下图所示
select trim('d' from 'david') as t1,ltrim('david','d') as t2,rtrim('david','d') as t3 from dual;
LPAD、RPAD
-
补位函数,用于在字符串char1的左端或者右端用char2补足到n位,char2可重复多次
-
LPAD(char1,n,char2) 左补位函数
-
RPAD(char1,n,char2) 右补位函数
-
例如: 执行下面的两个函数的结果如下图所示
SELECT LPAD(FEE,8,'$') FROM DAVID.STU_INF;
SELECT RPAD(FEE,8,'0') FROM DAVID.STU_INF;
SUBSTR
- SUBSTR(char,[m[,n]])
- 用于获取字符串的子串,返回char中从m位开始取n个字符
- 如果m=0,则从首字符开始,如果m取负数,则从尾部开始
- 如果没有设置n,或者n的长度超过了char的长度,则取到字符串的末尾为止
- 字符串的首位下标从1开始
- 例如: 执行的结果如下图
SELECT SUBSTR('DAVID IS A VERY SMART MAN',7,15) AS STR FROM DUAL;
INSTR
-
INSTR(char1,char2[,n[,m]])
-
返回子串char2在源字符串char1中的位置
-
参数:
- 从n的位置开始搜索,没有指定n,从第一个字符开始搜索
- m用于指定子串的第m次出现次数,如果不指定取值1
- 如果在char1中没有找到子串char2,返回0
-
例如: 执行的结果如下图
SELECT INSTR('DAVID IS A VERY SMART MAN','SMART') AS STR FROM DUAL;
如果你觉得本笔记对你有帮助,请扫码给予支持,金额随意