Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Oracle 数据库拾遗(二)

Oracle 数据库拾遗(二)

作者头像
1ess
发布于 2021-10-29 08:54:03
发布于 2021-10-29 08:54:03
1.9K00
代码可运行
举报
文章被收录于专栏:0x7c00的专栏0x7c00的专栏
运行总次数:0
代码可运行

Oracle 数据库拾遗(二)

發佈於 2021-01-12

前面一章介绍的是表结构的操作,本章开始讲解表数据的操作。之前我们已经说过很多有关 SQL 查询的知识。本篇主要讲一下 Oracle 与其他数据库不一样的地方。

本篇我们使用的 student 表数据结构如下:

SNO

SNAME

SAGE

SGENTLE

SDEPT

SBIRTH

1

120001

陈诚

23

12计算机

1989-05-02 00:00:00

2

120002

李忠和

25

12图形

1987-03-15 00:00:00

3

120003

张清

21

12外语

1991-10-02 00:00:00

4

120004

杨国

22

12计算机

1990-07-21 00:00:00

5

120005

林玲

26

12计算机

1990-05-04 00:00:00

6

120006

李沙

26

12工商管理

1986-08-02 00:00:00

返回表中的前 N 行记录

在 MS T-SQL 中,定义了 TOP N 关键字来实现,而 Oracle PL/SQL 不支持该关键字。我们可以使用游标 ROWNUM 来实现获取表的前 N 行记录。事实上,ROWNUM 是对查询结果集加的一个伪列,其需要先查询到结果集。简单地说,ROWNUM 是符合条件的结果集的序号,其从 1 开始。 需要特别注意: ROWNUM 的使用只能用 <、<= 和 != 等比较运算符,不能用 >、>= 等运算符,这是因为 ROWNUM 从自然数 1 开始,Oracle 认为 ROWNUM>n(n>1)这种条件是不成立的,因此使用 >、>= 等运算符是无法返回数据记录的。ROWNUM 从自然数 1 开始,因此条件 ROWNUM=1 是成立的,其可以作为 WHERE 子句的条件并返回表的第 1 行记录,但 ROWNUM=n(n>1) 是不成立的,不能作为条件直接写在 WHERE 子句中,否则无法返回正确结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    *
FROM student
WHERE ROWNUM <= 5;

函数

除了标准 SQL 的命令和语句外,Oracle PL/SQL 还提供了许多用于执行特定操作的专用函数。这些函数都是为了方便 SQL 对数据进行进一步处理而设计的,其使用大大增强了 PL/SQL 语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。 本章介绍两类函数的使用,通过实例对 PL/SQL 中的单行函数和聚合函数的具体应用和功能进行详细讲解。

我们之前的文章介绍过很多系统函数,如:

  • COUNT()
  • SUM()
  • AVG()
  • MAX()
  • MIN()

要特别注意: 聚合函数不能在 WHERE 子句中使用。 接下来我们主要介绍 PL/SQL 中的专用函数。

字符串函数

查找并替换字符串

字符串操作是 PL/SQL 中使用十分频繁的操作,常用的有字符串比较、返回字符串长度、查找和替换字符串等。为方便用户对数据表中的字符串数据类型进行操作,PL/SQL 提供了大量的字符串操作函数。查找并替换字符串函数是 REPLACE():

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    REPLACE(SDEPT, '计算机', 'Computer')
FROM student;
获取字符的 ASCII 码

在获取用户从键盘上的输入时经常需要将字符转换为 ASCII 码来进行比较运算。PL/SQL 提供了 ASCII 函数来实现字符到 ASCII 码的转换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    ASCII('A') A, 
    ASCII('Z') Z, 
    ASCII('0') ZERO, 
    ASCII(' ') SPACE
FROM dual;

该实例中使用的数据表 DUAL 不是预先创建的,而是 Oracle 的一个系统表。DUAL 表是 Oracle 中对所有用户可用的一个实际存在的表,这个表不能用来存储信息,在实际应用中仅用来执行 SELECT 语句。DUAL 表是一个 1 行 1 列的表,其结构已固定,用户不能向该表进行插入删除等操作。

返回字符串长度

PL/SQL 中使用了 LENGTH 函数来实现字符串长度计算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    SNAME,
    LENGTH(SNAME),
    SDEPT,
    LENGTH(SDEPT)
FROM student;

数字函数

使用 ROUND 函数确定精度

在许多数据表中都涉及实数,这就需要确定输出的精度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    ROUND(AVG(SAGE), 3)
FROM student;

日期函数

日期运算

我们可以使用 ADD_MONTHS 函数进行月份的算术运算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT
    SNO,
    SNAME,
    ADD_MONTH(SBIRTH, 12)
FROM student;

注意: ADD_MONTHS 函数不仅仅可以进行月份的算术加运算,如果将第二个参数设置为负数,就能实现月份的算术减运算。

日期格式化输出

函数 TO_CHAR 是将日期和数字转换为制定格式字符串函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') FROM DUAL;
提取日期特定部分

提取日期的特定部分是非常必要的,比如检索本年度每个月 16 日的销售量、检索访问客户集中的时间段,这些需要对日期的特定部分进行提取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
	SYSDATE,
	EXTRACT(YEAR FROM SYSDATE),
	EXTRACT(MONTH FROM SYSDATE),
	EXTRACT(DAY FROM SYSDATE),
	EXTRACT(HOUR FROM SYSTIMESTAMP),
	EXTRACT(MINUTE FROM SYSTIMESTAMP),
	EXTRACT(SECOND FROM SYSTIMESTAMP)
FROM DUAL;

在 Oracle PL/SQL 中,EXTRACT 函数的一般语法结构如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EXTRACT(fmt from d)

参数 fmt 有 YEAR、MONTH、DAY、HOUR、MINUTE、SECON 6 种。其中 YEAR、MONTH、DAY 可以为 DATE 或 TIMESTAMP 类型,但是 HOUR、MINUTE、SECOND 必须是 TIMESTAMP 类型。

NVL

SQL Server 中 MS T-SQL 中提供了一个函数 ISNULL 来判断一个字符串是否为空,Oracle PL/SQL 没有提供该函数,但使用了功能更为强大的函数来替代,即 NVL 函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
	ENO,
	ENAME,
	SALARY,
	NVL(COMM, 100)
FROM SALARY
WHERE SALARY < 3000;

在 Oracle PL/SQL 中,NVL 函数的一般语法格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NVL(x, value)

该函数的功能是如果 x 为空,返回 value,否则返回 x。由于 NVL 函数使用的频繁性,Oracle 又提供了 NVL 函数的衍生函数: NVL2 函数,其语法格式如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NVL2(x, value1, value2)

该函数的功能是如果 x 非空,返回 value1,否则返回 value2。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle数据库之单行函数详解
​ 函数就是和 Java 语言之中的方法的功能是一样的,都是为了完成某些特定操作的功能支持,而在 Oracle 数据库里面也包含了大量的单行函数,这些函数掌握了以后,可以方便的帮助进行数据库的相关开发。
星哥玩云
2022/08/18
2.8K0
oracle 常见函数_oracle有没有包含的函数
2. 聚合函数(多行函数、分组函数、组函数):操作多行数据,并返回一个结果。比如 SUM
全栈程序员站长
2022/11/01
3.2K0
Oracle到高斯数据库的SQL语法迁移手册(建议收藏)
异构数据库的迁移(譬如从Oracle迁移到openGauss)工作主要包括三个方面,
PawSQL
2024/08/20
9890
Oracle到高斯数据库的SQL语法迁移手册(建议收藏)
Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)
异构数据库的迁移(譬如从Oracle迁移到PostgreSQL)工作主要包括三个方面,
PawSQL
2024/08/20
6490
Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)
oracle的操作
在为一个Oracle数据库系统创建用户之后,这些用户既不能与数据库服务器连接,也不能做任何事情,除非他们具有执行特定数据库操作的权限. oracle内置权限:(SELECT * FROM SYSTEM_PRIVILEGE_MAP查);
微醺
2019/01/17
1.8K0
Oracle数据库之操作符及函数
-- 工资加1000 select empno,ename,job,sal+1000 from emp;
星哥玩云
2022/08/18
1.4K0
Oracle数据库之操作符及函数
Oracle 函数大全[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154754.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
3.1K0
Oracle 函数大全[通俗易懂]
oracle 中的除法函数,Oracle 函数
round:按指定精度对十进制数四舍五入,如:round(45.923, 1),结果,45.9
全栈程序员站长
2022/09/09
7.7K0
从迁移开发角度看差异:Oracle vs MySQL
随着近些年来数据库技术发展演进,及国内数据库日益活跃。越来越多的企业将数据库从传统商业数据库迁移到开源或国产数据库平台。本文对比了最为常见的一种情况,从Oracle迁移到MySQL需要关注的一些差异点。这方便应用研发在迁移之初做好必要的评估备。此外,因MySQL生态发展很广泛,很多数据库产品会将MySQL作为兼容的首选。因此,很多其他类型的数据库迁移,也可以参考此文内容。
用户5548425
2021/11/18
1.6K0
从迁移开发角度看差异:Oracle vs MySQL
Oracle函数 – 日期函数详解
SYSDATE:取得当前的日期和时间,类型是DATE.它没有参数.但在分布式SQL语句中使用时,SYSDATE返回本地数据库的日期和时间.
星哥玩云
2022/08/17
7.9K0
Oracle函数 – 日期函数详解
oracle 常用函数
聚合函数(多行函数、分组函数、组函数):操作多行数据,并返回一个结果。比如 SUM
Remember_Ray
2020/08/05
1.5K0
Oracle的使用
oracle数据库中是没有limit关键字的,想在Oracle数据库中实现limit功能可以通过使用rownum来限制结果集行数。
栖西
2023/10/17
6180
Oracle函数
【相近】trunc(x[,y]) 返回截取后的值,用法同round(x[,y]),只是不四舍五入
小小工匠
2021/08/16
4.2K0
matinal:ORACLE日期时间格式化参数详解
格式化日期指的是将日期转为字符串,或将字符串转为日期,下面几个函数可以用来格式化日期
matinal
2023/10/14
8690
Oracle数据库之第一篇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
海仔
2019/10/22
3.6K0
oracle 操作时间的函数总结
注意:这里只有 MONTHS_BETWEEN 有效。YEARS_BETWEEN 和 DAYS_BETWEEN 这两个都是无效函数
炒香菇的书呆子
2024/04/27
3K0
Oracle知识点总结(一)
这里用1,也是为了方便,当然如果数据量较大的话,也可以提高速度,因为写count(*)的话会所有列扫描,这里用1的话或者用字段名的话,只扫描你写的那个列其实1就代表你这个查询的表里的第一个字段
用户1093975
2018/08/02
2.4K0
Oracle 数据库拾遗(三)
前面的实例介绍了 SELECT 语句的简单应用,即简单查询。在实际应用中,对一个基本表或视图做简单查询是比较少的,大多情况下都要求对数据表进行筛选、分组或排序,这就需要用到高级查询。
1ess
2021/10/29
1.6K0
Oracle 数据库拾遗(四)
前面介绍的 SELECT 查询语句都是只有一个 SELECT-FROM-WHERE 形式的语句块,本篇再来看看子查询。
1ess
2021/10/29
1.2K0
Oracle学习笔记一
Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实 Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle就只有一个大数据库。
Kevin_Zhang
2018/08/20
1.1K0
Oracle学习笔记一
相关推荐
Oracle数据库之单行函数详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验