一、Oracle字符串操作

1.1 字符串类型

1.1.1 CHAR 和 VARCHAR2 类型

表示字符串数据类型,用来在表中存放字符串信息,比如姓名,职业,地址等。

  • CHAR存放定长字符,即存不满补空格
  • VARCHAR2 存放可变长字符,存多少占用多少

eg:

如保存字符‘HELLOWORLD’,共十个英文字母:

  • CHAR(100):10个字母,补齐90个空格,实际占用100 (浪费空间,节省时间)
  • VARCHAR2(100):10个字母,实际占用10(浪费时间,节省空间)

1.1.2 CHAR 和 VARCHAR2 的存储编码

默认单位是字节,可指定为字符。

  • CHAR(10),等价于CHAR(10 BYTE)
  • 指定单位为字符: CHAR(10 CHAR ),20个字节
  • VARCHAR2(10),等价于VARCHAR2(10 BYTE)
  • 指定单位为字符,VARCHAR2(10 CHAR ),20个字节

❤️ 注意:
每个英文字符占用一个字节,每个中文字符按照编码不同,占用2~4个字节

  • ZHS16GBK :2个字节
  • UTF-8 : 2~4个字节

1.1.3 CHAR 和 VARCHAR2 的最大长度

  • CHAR最大取值为2000字节
    最多保存2000个英文字符,1000个汉字(GBK)

  • VARCHAR2最大取值为4000字节
    最多可保存4000个英文字符,2000个汉字(GBK)

❤️ 注意:
CHAR可以不指定长度,默认为1, VARCHAR2必须指定长度。

1.1.4 LONG 和 CLOB类型

  • LONG:VARCHAR2加长版,存储变长字符串,最多可达2GB的字符数据

LONG有诸多限制:
(1)每个表只能有一个LONG类型列
(2)不能作为主键
(3)不能建立索引
(4)不能出现在查询条件中

  • CLOB:存储定长或变长字符串,最多可达4GB的字符串数据
    ❤️ Oracle建议开发中使用CLOB替代LONG类型

eg:

 CREATE TABLE student(id  NUMBER(4),name CHAR(20),detail CLOB);

1.2 字符串函数

1.2.1 CONCAT 和 “||”

  • CONCAT(char1,char2)
    返回两个字符串连接后的结果,两个参数char1,char2是要连接的两个字符串。

  • 等价操作:连接操作符“||”

  • 如果char1,char2任何一个为NULL,相当于连接了一个空格

eg 1:

 /*字符串函数CONCAT()函数,用来连接字符串*/SELECT CONCAT(ename,sal)FROM emp


eg 2 :

 SELECT CONCAT( CONCAT(ename,','),sal)FROM emp


eg 3:

SELECT ename||','||salFROM emp


❤️ 注意:建议多个字串连接时,用“||”更直观

1.2.2 LENGTH

  • LENGTH(char)
    用于返回字符串的长度

  • 如果字符类型是VARCHAR2,返回字符的实际长度,如果字符类型是CHAR,长度还要包括后补的空格。

eg:

 --LENGTH函数,查看字符串长度SELECT ename,LENGTH(ename) FROM emp

1.2.3 UPPER,LOWER,INITCAP

大小写转换函数,用来转换字符的大小写

  • UPPER(char):用于将字符转换为大写形式
  • LOWER(char):用于将字符转换为小写形式
  • INITCAP(char):用于将字符串中每个单词的首字母大写,其他字符小写

❤️ 注意:

(1)对于INITCAP而言,可以使用空格隔开多个单词,那么每个单词首字母都会大写。

(2)如果输入的参数是NULL值,仍然返回NULL值。
eg:

SELECT UPPER('helloword'),LOWER('HELLOWORD'),INITCAP('HELLOWORD')FROM  dual此处的dual是伪表的意思
伪表:dual当查询的内容不和任何表中数据有关系时,可以使用伪表,伪表只会查询出一条记录。

1.2.4 TRIM,LTRIM,RTRIM

去除当前字符串中两边的指定重复字符,LTRIM仅去除左侧的,RTRIM则仅去除右侧的。

eg 1 :

 SELECT TRIM('A' FROM 'AAAALIVEAAAAA')FROM dual


eg 2 :

 SELECT LTRIM('AAAAALIVEAAAA','A')FROM dual

eg 3 :

SELECT RTRIM('AAAALIVEAAAA','A')FROM dual


eg 4 :

 SELECT RTRIM('LIVEDBAC','ABCD')FROM dual

SELECT LTRIM('BBDAACDCLIVE','ABCD')FROM dual


❤️ 注意:
由后面两个例子发现, RTRIM、 LTRIM可以去掉字符串中指定的多个字符,凡是出现的给定的字符统统去掉(不是按照字符给定的顺序去掉的)。

1.2.5 LPAD,RPAD补位函数

eg 1:

SELECT LPAD(sal,5,'$')FROM emp


eg 2:
❤️ ❤️ ❤️ ❤️ ❤️ ❤️
实用的地方:实现左对齐右对齐

实现右对齐:SELECT LPAD(sal,5,' ')FROM emp

实现左对齐:SELECT RPAD(sal,5,' ')FROM emp

1.2.6 SUBSTR截取字符串

  • SUBSTR(char , [m,[,n]])
    用于获取字符串的子串,返回char中从m位开始取n个字符

  • 如果m = 0,则从首字符开始,如果m取负数,则从尾部开始

  • 如果没有设置n,或者n的长度超过了char的长度,则取到字符串末尾为止。

❤️ 注意:
(1) 数据库中的下标都是从1开始的
(2)截取的位置可以是负数,若是则表示从倒数第几个字符开始截取

eg 1 :

SELECT SUBSTR('THINKING IN JAVA',13,4)FROM dual


eg 2 :

SELECT SUBSTR('THINKING IN JAVA',-4,4)FROM dual

1.2.7 INSTR

  • INSTR(char1,char2[,n,m])函数
    查找char2在char1中的位置
    n为从第几个字符开始检索
    m为第几次出现
    n,m不写则默认都是1
    eg :
 SELECT INSTR('THINKING IN JAVA','IN',3,1)FROM dual

二、Oracle数值操作

2.1 数值类型

2.1.1 NUMBER ( P ) 表示整数

完整语法: NUMBER(precision , scale)

  • 如果没有设置scale,则默认取值为0,即NUMBER( P )表示整数
  • P表示数字的总位数,取值为1~38

用法:
一般用来在表中存放如编码、年龄、次数等用整数记录的数据

2.1.2 NUMBER ( P , S ) 表示浮点数

  • NUMBER(precision , scale)
  • precision: NUMBER可以存储的最大数字长度(不包括左右两边的0)
  • scale:在小数点右边的最大数字长度(包括左侧0)
  • 指定了s但是没有指定p,则默认p为38,如:
    列名 NUMBER ( * , s )

用法 :
经常用来做表中存放金额,成绩等有小数位数的数据

2.2 数值函数

2.2.1 ROUND

  • ROUND(n [ , m ]) :用于四舍五入
  • 参数中的n可以是任何数字,指要被处理的数字
  • m必须是整数
  • m取正数则四舍五入到小数点后第m位
  • m取0值则四舍五入到整数位
  • m取负数,则四舍五入到小数点前m为
  • m缺省,默认值是0

eg 1:

SELECT ROUND(45.68,2) FROM dual

eg 2 :

SELECT ROUND(45.678,0) FROM dual


eg 3 :

SELECT ROUND(55.678,-2) FROM dual

2.2.2 TRUNC

  • TRUNC ( n [ , m ]) :用于截取数字

eg 1 :

 SELECT TRUNC(45.68,2) FROM dual;


eg 2 :

SELECT TRUNC(45.678,0) FROM dual;


eg 3 :

 SELECT TRUNC(55.678,-2) FROM dual

2.2.3 MOD

MOD(m,n)求余数
eg 1 :

SELECT ename,sal, MOD(sal,1000) FROM emp


❤️ 注意:
如果n为0 则直接返回m

2.2.4 CEIL,FLOOR

向上取整,向下取整

eg 1 :

 SELECT CEIL(45.678) FROM dual;

eg 2 :

 SELECT FLOOR(45.678) FROM dual;

三、Oracle日期操作

3.1 日期类型

3.1.1 DATE

DATE是Oracle中最常用的日期类型,用来保存日期和时间。DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日。
DATE类型在数据库中的存储固定为7个字节,格式为:

  • 第1字节:世纪+100
  • 第2字节:年
  • 第3字节:月
  • 第4字节:天
  • 第5字节:小时+1
  • 第6字节:分+1
  • 第7字节:秒+1

3.1.2 TIMESTAMP

TIMESTAMP是Oracle常用的日期类型。与DATE的区别是不仅可以保存日期和时间,还能保存小数秒,最高精度可以到ns(纳秒)

  • 数据库内部用7或者11个字节存储,精度为0,用7字节存储,与DATE功能相同,精度大于0则用11字节存储。
  • 格式为:
    第1字节~第7字节:和DATE相同
    第8~11字节:纳秒,采用4个字节存储,内部运算类型为整形。

3.2 日期关键字

3.2.1 SYSDATE

SYSDATE其本质是一个Oracle的内部函数,返回当前的系统时间,精确到秒。

默认显示格式:
DD-MON-RR

eg:

SELECT SYSDATE FROM dual

3.2.2 SYSTIMESTAMP

内部函数,返回当前系统日期和时间,精确到毫秒。
eg:

SELECT SYSTIMESTAMP FROM dual

3.3 日期转换函数

3.3.1 TO_DATE

  • TO_DATE(char[,fmt [, nlsparams]]):将字符串按照定制格式转换为日期类型。
  • char要转换的字符串
  • fmt:格式
  • nlsparams:指定日期语言
    常用的日期格式:

    eg 1:
SELECT TO_DATE('2008年08月08日20:08:08','YYYY"年"MM"月"DD"日"HH24:MI:SS') `在这里插入代码片`
FROM dual

注意:

  1. 此处说明一下,虽然指定了时分秒字段,但不显示,因为Oracle SQL developer默认格式就是DD-MON-RR
  2. 在日期格式字符串中凡不是英文,符号,数字的其他字符,都需要使用双引号括起来
    eg:
SELECT TO_DATE('2008年08月08日20:08:08','YYYY"年"MM"月"DD"日"HH24:MI:SS')
FROM dual

  • 日期的计算:
    日期可以与一个数字进行加减法,这相当于加减指定的天
    两个日期可以进行减法,差为相差的天。
    eg:
--查看员工入职多少天了
SELECT ename,SYSDATE-hiredate FROM emp

3.3.2 TO_CHAR

将其他类型的数据转换为字符类型。

  • TO_CHAR(date[,fmt[,nlsparams]]):将日期类型数据date按照fmt的格式输出字符串。nlsparams用于指定日期语言。
    eg 1 :
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM dual

3.3.3 LAST_DAY(date)

  • LAST_DAY(date) : 返回日期date所在月的最后一天。按照自然月计算某些业务逻辑,或者安排月末周期性活动时很有用处。
    eg:
--查看当月底
SELECT LAST_DAY (SYSDATE) FROM dual

3.3.4 ADD_MONTHS(date,i)

  • ADD_MONTHS(date,i):返回日期date加上i个月后的日期值。
  • 参数 i 可以是任何数字,大部分时候取正值整数
  • 如果 i 是小数,将会被截取整数后再参与运算
  • 如果 i 是负数,则获得的是减去 i 个月后的日期值。
    eg 1:
查看每个员工入职20周年纪念日
SELECT ename,ADD_MONTHS(hiredate,12*20) FROM emp

3.3.5 MONTHS_BETWEEN(date1,date2)

  • MONTHS_BETWEEN(date1,date2):计算date1和date2两个日期值之间间隔了多少个月
  • 实际运算是date1-date2,如果date2时间比date1晚,会得到负值。
  • 除非两个日期间隔是整数月,否则会得到带小数位的结果,比如计算2009年9月1日到2009年10月10日之间间隔多少个月,会得到1.29个月。

eg:

SELECT MONTHS_BETWEEN(SYSDATE,hiredate) FROM emp

3.3.6 NEXT_DAY(date,char)

  • NEXT_DAY(date,char):返回date日期数据的下一个周几,周几是由参数char来决定的
  • 在中文环境下,直接使用“星期三”这种形式,英文环境下,需要使用“WEDNESDAY”这种英文的周几。为避免麻烦,可以直接用数字17表示周日周六。

❤️ 注意:

  1. NEXT_DAY不是明天!!!!
  2. 1表示周日,2表示周一,依次类推

eg:

查看下一个周天是几月几号
SELECT NEXT_DAY(SYSDATE,7) FROM dual

3.3.7 LEAST,GREATEST

  • GREATEST(expr1[,expr2[,expr3]]…)
  • LEAST(expr1[,expr2[,expr3]]…)
  • 也被称作比较函数,可以有多个参数值,返回结果是参数列表中最大或最小的值
  • 参数类型必须一致
  • 在比较之前,在参数列表中第二个以后的参数会被隐含的转换为第一个参数的数据类型,所以如果可以转换,则继续比较,如果不能转换将会报错。

eg 1:

SELECT LEAST(SYSDATE,TO_DATE('2008-08-08','YYYY-MM-DD')) FROM dual


eg 2 :

❤️ 注意:
求最小值与最大值,除了日期外,常用的数字也可以比较大小

SELECT LEAST(98,27) FROM dual

3.3.8 EXTRACT

  • EXTRACT(date FROM datetime) :从参数datetime中提取参数date指定的数据,比如提取年,月,日。

eg:

查看1980年入职的员工
SELECT ename,sal FROM emp WHERE EXTRACT(YEAR FROM hiredate)=1980

四、Oracle空值操作

4.1 NULL的含义

  • 数据库里的重要概念:NULL,即空值
  • 有时表中的某些字段值,数据未知或暂时不存在,取值NULL
  • 任何数据类型均可取值NULL

4.2 NULL的操作

4.2.1 插入NULL值

eg:

CREATE TABLE student(id   NUMBER(4),name CHAR(20),gender CHAR(1)
);INSERT INTO student VALUES(0001,'李莫愁','F');INSERT INTO student VALUES(0002,'林平之',NULL);  //--显式插入NULL值INSERT INTO student(id,name) VALUES(0003,'张无忌');//--隐式插入NULL值
SELECT * FROM student
COMMIT

4.2.2 更新成NULL值

  • UPDATE student SET gender = NULL;

❤️ 注意:

  1. 这种更新只有在此列没有非空约束的情况下才可操作
  2. 如果某列有非空约束,则无法更新为NULL值,上述语句会报错

eg:

--将1更新为NULL值
UPDATE student SET gender= NULL WHERE id=0001
SELECT * FROM student

4.2.3 NULL条件查询

  • 判断字段的值是否为NULL需要使用 IS NULL或者 IS NOT NULL

eg:

CREATE TABLE student(id   NUMBER(4),name CHAR(20),gender CHAR(1)
);
INSERT INTO student VALUES(0001,'李莫愁','F');
INSERT INTO student VALUES(0002,'林平之',NULL);
INSERT INTO student(id,name) VALUES(0003,'张无忌');
DELETE FROM student WHERE gender IS NULL;
SELECT * FROM student

4.2.4 NULL值的运算操作

  • NULL与任何数字运算结果还是NULL
  • NULL与字符串拼接等于什么都没干

eg:

查看每个员工的收入
SELECT ename,sal,comm,sal+comm FROM emp

4.3 空值函数

4.3.1 NVL

  • 空值函数NVL(arg1,arg2)
    当arg1为NULL,函数返回arg2的值,若不为NULL,则返回arg1本身。
    所以该函数的作用是将NULL值替换为一个非NULL值。

eg:


SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp


❤️ 注意:

在此说明一下,上面例子在查询员工的工资时,直接使用sal+comm(工资+绩效),这样有点问题,因为有的员工的绩效值为NULL,而且NULL与任何数字运算结果还是NULL,所以在使用sal+comm时会出现员工的工资为NULL。
所以此时使用NVL(comm,0)就很好地解决了这个问题,这个函数将所有绩效值为NULL的全部替换为0,所以避免了员工工资出现NULL值的情况。

4.3.2 NVL2

  • NVL2(arg1,arg2,arg3)
    当arg1不为NULL,则函数返回arg2
    当arg1位NULL,则函数返回arg3
    该函数是根据一个值是否为NULL来返回两个不同结果

eg:

/*
查看每个人的绩效情况,即:
有绩效的,显示为“有绩效”;
没绩效的,显示为“没有绩效”
*/
SELECT ename,sal,NVL2(comm,'没有绩效','有绩效')FROM emp 

Oracle数据库基础(二)相关推荐

  1. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  2. SSH:Oracle数据库基础

    2019独角兽企业重金招聘Python工程师标准>>> Oracle数据库基础 一:Oracle基础知识 Oracle数据库的主要特点 (1.)支持多用户,大事务量的事务处理 (2. ...

  3. Oracle数据库基础入门《一》Oracle服务器的构成

    Oracle数据库基础入门<一>Oracle服务器的构成 Oracle 服务器是一个具有高性能和高可靠性面向对象关系型数据库管理系统,也是一 个高效的 SQL 语句执行环境. Oracle ...

  4. oracle数据库基础知识总结,oracle数据库基础知识学习笔记

    oracle数据库基础知识学习笔记 一.oracle数据库类型: Char:  字符型(最大长度2000,定长.不足时以空格补充) Varchar2:字符型 最大长度 4000,变长,实际长度由存储的 ...

  5. 【Oracle SQL数据库-教学2】--- Oracle数据库基础

    [Oracle SQL数据库-教学2]- Oracle数据库基础 文章目录 [Oracle SQL数据库-教学2]--- Oracle数据库基础 本期主要内容: 一. 数据库管理系统概述 ① 数据处理 ...

  6. Web阶段--Oracle数据库基础知识点

    Web阶段–Oracle数据库基础知识点 一.数据库 1.定义 是一个数据存储管理的软件,全称rdbms(关系数据库管理系统),简称数据库(db) 2.为什么需要应用数据库? 1.现有文本文件存放数据 ...

  7. Oracle数据库基础知识点大全(一)

    Oracle数据库基础知识点大全 一.数据库基本概念 E-R模型 数据库对象 二:标准SQL包含了4种基本的语句类别 三:DML语句(数据操作语句) 数字和日期使用的数学表达式 常用 where 查询 ...

  8. oracle 语句 在线测试,2017年Oracle数据库基础测试答案.doc

    . . word完美格式 2017年Oracle数据库基础测试答案 姓名 成绩 一.单项选择题(每题1分,共60分) 列出EMP表中,从事每个工种(JOB)的员工人数 A.select job fro ...

  9. Oracle数据库基础教程:入门其实很简单

    为什么80%的码农都做不了架构师?>>>    Oracle数据库基础教程:入门其实很简单 Oracle数据库系统是目前最流行的客户/服务器数据库之一.本文集从初学者的角度出发,由浅 ...

  10. oracle数据库中基础知识,oracle数据库基础知识

    oracle数据库基础知识 -- End loop --1 declare pnum number(4):=0; begin while pnum < 10 loop dbms_output.p ...

最新文章

  1. 【POJ】1505 Copying Books
  2. Android从入门到进阶之高级控件
  3. C# MVC的博客开发(三)注册
  4. hbase sqoop 实验_SQOOP安装及使用-实验
  5. 简述Android 程序执行流程,Android系统启动流程简述
  6. 在Ubuntu 18.04上搭建SonarQube服务
  7. 告别遥控器,BBC 试验用大脑调台
  8. 实验1-5 输出菱形图案 (5 分)
  9. [译]10-Spring BeanPostProcessor
  10. Eclipse tooltip变黑的修正
  11. stream常用list转map list转list
  12. python爬取微信好友教程_Python爬取微信好友
  13. 一加手机高德位置服务器,高德地图在线导航悬浮窗闪亮一加手机
  14. js json stringify
  15. 【SDOI2015】临行前的夜
  16. anchor-free目标检测
  17. 264编码 yocto_66AK2H06
  18. linux查看pcie网卡命令,kudzu命令查看及设置网卡等硬件信息
  19. centos怎么查找node安装路径_centos7下用yuminstall安装nodejs,默认装在哪个目录了
  20. 《操作系统》-生产者消费者问题

热门文章

  1. 智慧检察院公益诉讼云平台解决方案-合集
  2. 【最全】Google Chrome20-83各版本下载链接整理
  3. mysql intersect用法格式_我们如何模拟MySQL INTERSECT查询?
  4. 字体立体阴影css代码,字体加阴影效果怎么用css属性实现?(代码演示)
  5. Java——计算机基础知识
  6. char*和char[]的区别
  7. QT的Listwidget控件使用
  8. 今天心情不错,写个随笔。
  9. Rancid+Subversion (SVN)管理Cisco配置
  10. 这才是数字孪生污水处理厂该有的样子 | 智慧水务