Oracle系列之九:一文搞懂Oracle常用函数

news2024/9/19 1:10:27

Oracle常用系统函数

  • 1. 字符串函数
  • 2. 数学函数
  • 3. 日期函数
  • 4. 聚合函数
  • 5. 其他

Oracle是一种关系型数据库管理系统,它提供了许多内置函数,以便用户可以更轻松地处理数据。

1. 字符串函数

(1)lengthb/length

计算字符串长度

  • lengthb求得是字节(Byte,1Byte=8bit)长度
  • length求得是字符长度
select lengthb('中') from dual;
select length('中') from dual;

ZHS16GBK下,lengthb(‘中’)为2字节,length(‘中’)为1(个字符),即一个字符占两个字节

数据库中存储的CHAR(19) 表示占19个字节。

(2)SUBSTR

SUBSTR用于截取字符串的子串,需要注意的是Oracle 数据库中字符串的下标是从 1 开始而不是从 0 开始的。该函数的语法如下:

SUBSTR( string, start [, length] )
  • string是要截取的字符串
  • start是要开始截取的位置
  • length是要截取的子串长度(可选)

e.g.

select substr('abcdefg',0,3) from dual;  

输出

abc

select substr('abcdefg',1,3) from dual;  

输出

abc

select substr('abcdefg',2,3) from dual;   

输出

bcd

select substr('abcdefg',-3,3) from dual;    

输出

efg

(3)INSTR

INSTR 在字符串中搜索指定字符,返回发现指定字符的位置。该函数的语法如下:

INSTR( string, substring [, start_position [, occurrence ]] )
  • string是要搜索的字符串
  • substring是要查找的子
  • start_position是要开始搜索的位置(可选)
  • occurrence是要查找的子串出现的次数(可选)

e.g.

Select instr('oracle training','ai') From dual;  

输出

10

(4)CONCAT

CONCAT连接两个字符串

e.g.

SELECT CONCAT('Hello ', 'World', '!') FROM dual;

输出

Hello World!

按要求更新指定列:

Update t_skzy Set website=concat('http://',website) Where website Not Like 'http%' And website Like '%.%'

(5)REPLACE

REPLACE用于替换字符串的指定子串。该函数的语法如下:

REPLACE( string, substring1 [, substring2] )
  • string是要替换子串的字符串
  • substring1是要被替换的子串
  • substring2是用来替换substring1的字符串(可选)

e.g.

SELECT REPLACE('Hello World!', 'Hello', 'Goodbye') FROM dual;

输出:

“Goodbye World!”

(6)TRIM, LTRIM, RTRIM

TRIM:去除字符串的空格或指定字符

语法如下:

TRIM([leading|trailing|both] [trim_character] FROM string)
  • leading|trailing|both:可选参数,用于指定去除字符串的空格或指定字符是在字符串的前面、后面还是两边,默认为 both。
  • trim_character:可选参数,用于指定要去除的字符,默认为字符串中的空格。
  • string:必需参数,要去除空格或指定字符的字符串。

LTRIM :去除字符串左侧的空格或指定字符。

语法如下:

LTRIM([trim_character] FROM string)
  • trim_character:可选参数,用于指定要去除的字符,默认为字符串中的空格。
  • string:必需参数,要去除空格或指定字符的字符串。

e.g.

Select ltrim('trimtest ltrim ','trim') From dual  

输出

test ltrim

RTRIM :去除字符串右侧的空格或指定字符。

语法如下:

RTRIM([trim_character] FROM string)
  • trim_character:可选参数,用于指定要去除的字符,默认为字符串中的空格。
  • string:必需参数,要去除空格或指定字符的字符串。

(7)ASCII

ASCII返回给定字符串中第一个字符的ASCII代码值。

e.g.

SELECT ASCII('A') FROM dual;

输出

65

(8)NVL

NVL( string1, replace_with)

如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。

例如,以下查询将返回一个包含员工的职务和部门名称的结果,如果员工所在的部门为空,则返回“Unknown Department”:

SELECT job_id, NVL(department_name, 'Unknown Department') 
FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id;

(9)INITCAP,LOWER,UPPER

  • INITCAP 将字符串第一个字母变为大写
  • LOWER 将字符串所有字母小写
  • UPPER 将字符串所有字母大写

2. 数学函数

(1) ROUND

ROUND函数用于将数字四舍五入到指定的小数位数。例如将数字3.1415926四舍五入到两个小数位:

SELECT ROUND(3.1415926, 2) AS RoundedNumber FROM dual;

输出

3.14

(2)TRUNC

TRUNC函数用于将数字截断为指定的小数位数。例如将数字3.1415926截断为两个小数位:

SELECT TRUNC(3.1415926, 2) AS TruncatedNumber FROM dual;

输出

3.14

(3)ABS

ABS函数用于计算数字的绝对值。例如计算数字-10的绝对值:

SELECT ABS(-10) AS AbsoluteValue FROM dual;

输出

10

(4)POWER

POWER函数用于计算数字的幂。例如计算2的3次方:

SELECT POWER(2, 3) AS PowerValue FROM dual;

输出

8

(5)MOD

MOD取模运算,返回两个数相除的余数。

e.g.

SELECT MOD(5, 2) FROM dual;

输出

1

(6)其他

  • CEIL: 返回比输入值大的最小整数。
  • FLOOR: 返回比输入值小的最大整数。
  • MOD: 返回两个数值相除的余数。

3. 日期函数

(1)CURRENT_DATE
CURRENT_DATE是一个SQL标准函数,返回当前日期(不带时间),可以在SELECT语句中使用。例如:

SELECT CURRENT_DATE FROM DUAL; 

返回当前日期,格式为YYYY-MM-DD。

(2)SYSDATE

SYSDATE是Oracle的系统函数,返回当前日期和时间(数据库服务器所在时区的日期和时间,而不是客户端的时区),包括日期和精确到秒的时间。例如,获取当前日期和时间:

SELECT SYSDATE AS CurrentDateTime FROM dual;

返回当前日期和时间,格式为YYYY-MM-DD HH:MI:SS。

(2)ADD_MONTHS函数

ADD_MONTHS函数用于在日期上添加指定的月数。例如,在当前日期上添加3个月:

SELECT ADD_MONTHS(SYSDATE, 3) AS FutureDate FROM dual;

(3)MONTHS_BETWEEN函数

MONTHS_BETWEEN函数用于计算两个日期之间的月数。例如,计算两个日期之间的月数:

SELECT MONTHS_BETWEEN('01-JAN-2022', '01-JAN-2021') AS MonthDifference FROM dual;

输出

12

(4)TO_CHAR/TO_DATE

  • TO_CHAR函数可以将日期型数据转换为字符串
  • TO_DATE函数则可以将字符串型数据转换为日期型数据

e.g.

select to_char(current_date,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_date('1999/01/01','yyyy/mm/dd') from dual;

4. 聚合函数

聚合函数用于对数据进行聚合计算,如求和、平均数、最大值、最小值等,聚焦函数不能作为条件用在where子句中,需要与havinggroup一起使用

(1)COUNT

COUNT函数用来计算某个表或某个查询语句返回的结果集中的行数。如果指定了DISTINCT关键字,则将去除重复的行计入计数。

例如,查询含员工总数:

SELECT COUNT(*) FROM employees;

(2)SUM

SUM函数用来计算某个表或某个查询语句返回的结果集中某个列的数值之和。

例如,查询员工月薪总和:

SELECT SUM(salary) FROM employees;

(3)AVG

AVG函数用来计算某个表或某个查询语句返回的结果集中某个列的数值平均值,其语法如下:

例如,查询员工平均月薪:

SELECT AVG(salary) FROM employees;

(4)MAX/MIN
MAX/MIN分别用来计算某个表或某个查询语句返回的结果集中某个列的数值最大值或最小值。

例如,查询含员工最高月薪:

SELECT MAX(salary) FROM employees;

5. 其他

(1)DECODE

DECODE:函数用来根据不同的条件返回不同的值,其语法如下:

DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。可以给出多个if/then 配对。

例如,员工信息表中有出生年份和州名,需要统计不同年份、不同大洲的人数。
在这里插入图片描述
即形成如下形式的统计表:

在这里插入图片描述

Select csrq 年份,
sum(decode(zm,'大洋洲',cou)) 大洋洲,
sum(decode(zm,'欧洲',cou)) 欧洲,
sum(decode(zm,'亚洲',cou)) 亚洲,
sum(decode(zm,'非洲',cou)) 非洲,
sum(decode(zm,'美洲',cou)) 美洲 From (
select t.zm,substr(csrq,1,4) csrq,Count(*) cou from employee t Group By t.zm,substr(csrq,1,4)) Group By csrq Order By csrq

(2)CASE

CASE根据指定的条件返回不同的值。该函数与DECODE功能类似,但它更加灵活,可以嵌套使用,其语法如下:

CASE expression
  WHEN value1 THEN result1
  [WHEN value2 THEN result2 ...]
  [ELSE default]
END
  • expression是要比较的值
  • value1、value2等是要比较的条件
  • result1、result2等是对应的返回值(如果expression与某个value相等,则返回相对应的result)
  • default是一个可选项,表示当expression与所有value都不相等时要返回的默认值。

例如实现前述功能的SQL语句如下:

Select substr(csrq,1,4) 出生年份, 
Sum(Case When zm='大洋洲' Then 1 else 0 End) 大洋洲,
Sum(Case When zm='欧洲' Then 1 Else 0 End) 欧洲,
Sum(Case When zm='亚洲' Then 1 Else 0 End) 亚洲,
Sum(Case When zm='非洲' Then 1 Else 0 End) 非洲,
Sum(Case When zm='美洲' Then 1 Else 0 End) 美洲
From employee Group By substr(csrq,1,4) Order By 出生年份

(3)ROLLUP/CUBE

  • ROLLUP是GROUP BY子句的一种扩展,可以为每个分组返回小计记录以及为所有分组返回总计记录。
  • CUBE也是GROUP BY子句的一种扩展,可以返回每一个列组合的小计记录,同时在末尾加上总计记录。

例如形成如下形式的统计表:

在这里插入图片描述

Select 年份,Sum(大洋洲) 大洋洲,Sum(欧洲) 欧洲,Sum(亚洲) 亚洲,Sum(非洲) 非洲,Sum(美洲) 美洲 From(
Select csrq 年份,
sum(decode(zm,'大洋洲',cou)) 大洋洲,
sum(decode(zm,'欧洲',cou)) 欧洲,
sum(decode(zm,'亚洲',cou)) 亚洲,
sum(decode(zm,'非洲',cou)) 非洲,
sum(decode(zm,'美洲',cou)) 美洲 From (
select t.zm,substr(csrq,1,4) csrq,Count(*) cou from employee t Group By t.zm,substr(csrq,1,4)) Group By csrq)
Group By Rollup(年份) Order By 年份

(4)MD5

DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,该函数只能直接在程序包中调用,不能直接应用于SELECT语句。

DBMS_OBFUSCATION_TOOLKIT.MD5返回的字串,是RAW类型,要正确显示,需要经过Utl_Raw.Cast_To_Raw转换:

CREATE OR REPLACE Function MD5(passwd Varchar2)
Return Varchar
Is
md5_output Varchar2(32);
Begin
md5_output:=utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING=>passwd));
Return md5_output;
End;

(5)CAST

CAST函数用于将一个数据类型转换为另一种数据类型。

  • 将一个字符串转换为数值型数据:
SELECT CAST('123' AS NUMBER) FROM dual;
  • 将一个日期字符串转换为日期类型:
SELECT CAST('2022-04-21' AS DATE) FROM dual;

(6)查询Blob/Clob类型字段

DBMS_LOB是Oracle数据库提供的一个用于操作大型对象(LOB)数据的包。其中,LOB包括四种类型:CLOB、NCLOB、BLOB和BFILE。

DBMS_LOB包提供了一系列子程序,可以用于读取、写入、截断、复制、比较等LOB对象的操作:

  • DBMS_LOB.READ:用于从LOB对象中读取数据;
  • DBMS_LOB.WRITE:用于向LOB对象中写入数据;
  • DBMS_LOB.TRIM:用于截断LOB对象中的数据;
  • DBMS_LOB.COPY:用于将LOB对象中的数据复制到另一个LOB对象中;
  • DBMS_LOB.COMPARE:用于比较两个LOB对象中的数据是否相同。

DBMS_LOB包有多个内置函数:

  • dbms_lob.append:追加LOB值
  • dbms_lob.substr:截取LOB值
  • dbms_lob.instr:查找LOB值中的字符串位置
  • dbms_lob.getlength:查询Blob/Clob类型字段的长度

e.g.

Select * From table_name Where dbms_lob.instr(Column,utl_raw.cast_to_raw('内容',1,1))>0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常用命令整理

Linux常用命令整理 1. cat显示2. reboot 重启3. cd切换目录4. ls目录查看5. mkdir创建目录6. rm 删除文件7. mv目录修改8. cp拷贝9. find查找10. touch新建文件11. vi/vim修改文件12. chmod改变权限13. tar -zcvf 打包文件14. tar -xvf 解压文件15. grep文本搜索16. su, sudo17…

数据库学习总结(MySQL)

一.为什么要使用数据库? 在我们平时存储数据的时候,往往采用文件存储即可,所以,为什么要使用数据库呢? 原因在于,文件存储数据有以下缺点: 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 为了解决上述问题,我们创造了更适合…

Revit构件显隐:参数和插件控制构件显隐性操作

一、如何通过参数来控制族中不同构件的显隐性? 在这里,将它分享给大家~ 首先,我们在项目中任意绘制一道墙,然后任意布置一个带有门把手的门,如下图: 接着,我们【双击】进入这个门族的编辑界面,…

C++ 互斥锁原理以及实际使用介绍

兄弟姐妹们,我又回来了,今天带来实际开发中都需要使用的互斥锁的内容,主要聊一聊如何使用互斥锁以及都有哪几种方式实现互斥锁。实现互斥,可以有以下几种方式:互斥量(Mutex)、递归互斥量&#x…

掌握虚拟专用网络配置

目录 一、防火墙的IPSEC VPN 二、DSVPN 一、防火墙的IPSEC VPN 总体拓扑如下:实现PC间的加密通信。 FW1的配置:划分接口配置地址。 定义感兴趣流: 注:什么是感兴趣流?答:感兴趣流是VPN的术语&#xff0…

银行数字化转型导师坚鹏:数字化思维创新与金融业转型升级

数字化思维创新与金融业转型升级 课程背景: 很多金融机构存在以下问题: 金融机构的员工不知道需要具备什么样的数字化思维 不清楚数字化思维对金融机构转型升级的重要影响? 不清楚数字化背景下如何进行金融机构转型升级? …

Linux 块设备 EMMC 驱动介绍

目录: 高质量文章导航-持续更新中 前置:硬件接口 EMMC(Embedded Multi-Media Card)是一种用于存储和传输数据的嵌入式存储器(芯片),通常用于移动设备和嵌入式设备中。Linux内核提供了一个通用的EMMC驱动框架,可以支持各种不同的EMMC设备。 EMMC总线采用了典型的主从…

通过Python的PIL库给图片添加图片水印

文章目录 前言一、素材准备1.原图2.水印图 二、使用PIL库给图片添加图片水印1.引入库2.定义图片路径3.打开原图4.打开水印图片5.计算水印图片大小6.计算原图大小7.调整水印图片大小7.1调整前7.2调整后 8.计算水印图片位置8.1左上8.2左下8.3右上8.4右下8.5中间 9.添加水印10.保存…

Windows11台式机连接Type-C触摸屏显示器

我的设备是GoBiggerR便携触控屏,有1个mini-HDMI和2个USB-C接口。家用的是台式机,玩一些游戏用触控比较方便,于是想把触控屏利用上。 先说结论,我的方案是使用arpara VR DisplayPort 1.4数据线。 arpara 5K VR头显配件3.5米数据线…

U-Boot 初次编译

1.在 Ubuntu 中创建存放 uboot 的目录 ,比如我的是/home/hsj/linux/IMX6ULL/uboot,然后在此目录 下新建一个名为“alientek_uboot”的文件夹用于存放 uboot 源码。alientek_uboot 文件夹创建成功以后使用 FileZilla 软件将正点原子提供的 uboot 源码拷贝到此目录中.…

Docker 部署 MySQL 一主多从

服务器规划:使用docker方式创建,主从服务器IP一致,端口号不一致 主服务器:容器名 mysql-master,端口 3306从服务器:容器名 mysql-slave1,端口 3307从服务器:容器名 mysql-slave2&am…

springboot+vue幼儿园管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的幼儿园管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌…

删除Android手机自带应用

目录 1、下载手机adb插件 2、进入开发者模式 3、删除应用 4、之后记得关闭手机usb及开发模式 1、下载手机adb插件 Downloads - ADB Shell 之后路径行输入cmd,或者winr,进入该目录: 2、进入开发者模式 设置--系统--关于手机--快速多次点…

YOLOv7+双目实现三维跟踪(python)

YOLOv7双目实现三维跟踪(python) 1. 目标跟踪2. 测距模块2.1 测距原理2.2 添加测距 3. 细节修改(可忽略)4. 实验效果 相关链接 1. YOLOV5 双目测距(python) 2. YOLOV7 双目测距(python&#x…

快速发展、持续领跑,软件顶级盛会第二届中国国际软件发展大会成功召开

2023年4月18日,第二届中国国际软件发展大会在北京国家会议中心召开,工业和信息化部党组成员、副部长王江平出席大会并致辞。 王江平副部长表示,党的十八大以来,我国软件产业快速发展,核心技术持续突破,产业…

LiveCharts2 初步认识

文章目录 1 LiveCharts2 是什么?2 LiveCharts2 可以做什么?3 简单使用LiveCharts2 ,实现动态曲线图 1 LiveCharts2 是什么? GitHub:https://github.com/beto-rodriguez/LiveCharts2 官网: https://lvchar…

CANoe自带的诊断工程分析

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

基于matlab的长短期神经网络的三维路径跟踪预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的三维路径跟踪预测 MATALB代码 效果图 结果分析 展望 参考论文 背影 路径跟踪是指通过计算机算法,。长短期记忆模型对复杂,非线性运动的目标跟踪,解决目标跟踪困难&a…

回溯算法专题

回溯算法专题 框架篇全排列问题N 皇后问题如果只需要一个合法答案,怎么办? 快速排序LeetCode 912. 排序数组解题思路代码实现LeetCode 215. 数组中的第K个最大元素解题思路代码实现总结 不要纠结,干就完事了,熟练度很重要&#xf…

e与phi不互素 --- 四道题详记

文章目录 题一([MoeCTF2022]signin)题目描述:题目分析: 题二(unusualrsa5)题目描述:题目分析: 题三([0ctf 2016]RSA?)题目描述:题目分析: 题四(2022ctfshow卷王杯现代密码签到)题目描述:题目分…