Oracle函数

Oracle 函数

  • 一、SQL函数
    • 分类
  • 二、单行函数
    • 字符函数
    • 数字函数
    • 日期函数
    • 转换函数
      • to_char
      • to_number
      • to_date
    • 其它函数
    • 单行函数嵌套
  • 三、组函数
    • 数据分组
      • 创建分组
      • 过滤分组(having子句)
      • 分组和排序
    • Selecct子句顺序

一、SQL函数

函数一般是在数据上执行的,它給数据的转换和处理提供了方便。只是将取出的数据进行处理,不会改变数据库中的值。
在这里插入图片描述

分类

  • SQL函数可以分为组函数和单行函数。
    1、组函数又被称为聚合函数,用于对多行数据进行操作,并返回一个单一的结果,组函数仅可用于选择列表或查询的having子句中。
    2、单行函数是对单个数值进行操作,并返回一个值。
    在这里插入图片描述

二、单行函数

在这里插入图片描述
例:
查询所有员工的薪水总和
select sum(sal) from emp;
在这里插入图片描述
查看表中有多少条记录
select deptno,count() from emp group by deptno having count() > 3;
在这里插入图片描述

字符函数

  • 字符函数全以字符作为参数,返回值分为两类:一类返回字符值,一类返回数字值。

例:
concat: 表示字符串的连接,等同于||
select concat(‘my name is ‘, ename) from emp;
在这里插入图片描述
将字符串的首字母大写
select initcap(ename) from emp;
在这里插入图片描述
将字符串全部转换为大写
select upper(ename) from emp;
在这里插入图片描述
将字符串全部转换为小写
select lower(ename) from emp;
在这里插入图片描述
填充字符串
向前填充:
select lpad(ename,10,’‘) from emp;
在这里插入图片描述
向后填充:
select rpad(ename,10,’
’) from emp;
在这里插入图片描述
去除空格
trim: 去除 ename 列值的前导和尾随空格,并返回结果集。
select trim(ename) from emp;
ltrim: 去除 ename 列值的前导空格,并返回结果集。
select ltrim(ename) from emp;
rtrim: 去除 ename 列值的尾随空格,并返回结果集。
select rtrim(ename) from emp;
在这里插入图片描述
查看指定字符串的位置
select instr(‘ABABCDEF’,‘A’) from emp;
在这里插入图片描述
查看字符串的长度
select length(ename) from emp;
在这里插入图片描述
截取字符串的操作
select substr(ename,0,2) from emp;
在这里插入图片描述
替换操作
select replace(‘ababefg’,‘ab’,‘hehe’) from emp;
在这里插入图片描述

数字函数

  • 数字函数以NUMBER类型为参数返回NUMBER值

例:
给小数进行四舍五入操作,可以指定小数部分的位数
select round(123.123,2) from dual;
在这里插入图片描述
select round(123.128,2) from dual;
在这里插入图片描述
select round(-123.128,2) from dual;
在这里插入图片描述
截断数据,按照位数去进行截取,但是不会进行四舍五入的操作
select trunc(123.128,2) from dual;
在这里插入图片描述
取模操作
select mod(10,4) from dual;
在这里插入图片描述
select mod(-10,4) from dual;
在这里插入图片描述
向上取整
select ceil(12.12) from dual;
在这里插入图片描述
在这里插入图片描述
向下取整
select floor(13.99) from dual;
在这里插入图片描述
取绝对值
select abs(-100) from dual;
在这里插入图片描述
获取正负值
select sign(-100) from dual;
在这里插入图片描述
x的y次幂
select power(2,3) from dual;
在这里插入图片描述

日期函数

  • Oracle以内部数字格式存储日期:世纪,年,月,日,小时,分钟,秒。

例:
sysdate/current_date: 返回当前的日期
select sysdate from dual;
在这里插入图片描述
select current_date from dual;
在这里插入图片描述
add_months: 添加指定的月份
select add_months(hiredate,2),hiredate from emp;
在这里插入图片描述
last_day: 返回输入日期所在月份的最后一天
select last_day(sysdate) from dual;
在这里插入图片描述
months_between: 两个日期相间隔的月份
select months_between(sysdate,hiredate) from emp;
在这里插入图片描述
日期和日期时间算数
返回四舍五入的第一天
select sysdate 当时日期,
round(sysdate) 最近0点日期,
round(sysdate,‘day’) 最近星期日,
round(sysdate,‘month’) 最近月初,
round(sysdate,‘q’) 最近季初日期,
round(sysdate,‘year’) 最近年初日期 from dual;
在这里插入图片描述
返回下周的星期几
select next_day(sysdate,‘星期一’) from dual;
在这里插入图片描述
提取日期中的时间
select
extract(hour from timestamp '2001-2-16 2:38:40 ’ ) 小时,
extract(minute from timestamp '2001-2-16 2:38:40 ’ ) 分钟,
extract(second from timestamp '2001-2-16 2:38:40 ’ ) 秒,
extract(DAY from timestamp '2001-2-16 2:38:40 ’ ) 日,
extract(MONTH from timestamp '2001-2-16 2:38:40 ’ ) 月,
extract(YEAR from timestamp '2001-2-16 2:38:40 ’ ) 年 from dual;
在这里插入图片描述
返回日期的时间戳
select localtimestamp from dual;
在这里插入图片描述
select current_date from dual;
在这里插入图片描述
select current_timestamp from dual;
在这里插入图片描述
给指定的时间单位增加数值
select
trunc(sysdate)+(interval ‘1’ second), --加1秒(1/24/60/60)
trunc(sysdate)+(interval ‘1’ minute), --加1分钟(1/24/60)
trunc(sysdate)+(interval ‘1’ hour), --加1小时(1/24)
trunc(sysdate)+(INTERVAL ‘1’ DAY), --加1天(1)
trunc(sysdate)+(INTERVAL ‘1’ MONTH), --加1月
trunc(sysdate)+(INTERVAL ‘1’ YEAR), --加1年
trunc(sysdate)+(interval ‘01:02:03’ hour to second), --加指定小时到秒
trunc(sysdate)+(interval ‘01:02’ minute to second), --加指定分钟到秒
trunc(sysdate)+(interval ‘01:02’ hour to minute), --加指定小时到分钟
trunc(sysdate)+(interval ‘2 01:02’ day to minute) --加指定天数到分钟 from dual;
在这里插入图片描述

转换函数

  • 标量数据可以有类型的转换,转换分为两种,隐式类型转换和显式类型转换。
    1、隐式转换:指的是字符串可以转换为数值或者日期。
    2、显式转换:to_char:当由数值或者日期转成字符串的时候,必须要规定格式。

注意: 虽然数据类型之间可以进行隐式类型转换,但是仍然建议使用显式转换函数,以保持良好的设计风格。
在这里插入图片描述

to_char

TO_CHAR函数操作日期

格式元素含义
YYYY、YY代表四位、两位数字的年份
MM用数字表示的月份
MON月份的缩写、对中文月份来说就是全称
DD数字表示的日
DY星期的缩写,对中文星期来说就是全称
HH24,HH1212小时或者24小时进制下的时间
MI分钟数
SS秒数

TO_CHAR(date,‘fmt’)
用于将日期和时间戳转换成varchar2类型字符串,如果指定了格式字符串,则用它控制结果的结果。
1、格式控制串由格式元素构成。
2、格式控制串必须用单引号括起来。
例:
select ‘999’ + 10 from dual;
在这里插入图片描述
date:to_char
select to_char(sysdate,‘YYYY-MM-dd HH24:MI:SS’) from dual;
在这里插入图片描述
TO_CHAR函数操作数字

控制符含义
9代表一位数字,如果该位没有数字则不进行显示,但对于小数点后面的部分仍会强制显示
0代表一位数字,如果该位没有数字则强制显示0
$显示美元符号
L显示本地货币符号
.显示小数点
,显示千分位符号

to_char(num,format)
用于将Number类型参数转换为varchar2类型,如果指定了format,它会控制整个转换。
例:
number:to_char
select to_char(123.456789,‘9999’) from dual;
在这里插入图片描述
select to_char(123.456789,‘0000.00’) from dual;
在这里插入图片描述
select to_char(123.456789,‘$0000.00’) from dual;
在这里插入图片描述
select to_char(123.456789,‘L0000.00’) from dual;
在这里插入图片描述
select to_char(123456789,‘999,999,999,999’) from dual;
在这里插入图片描述

to_number

将char或varchar2类型的string类型转换为number类型
例:
to_number: 转成数字
select to_number(‘123,456,789’,‘999,999,999’) from dual;
在这里插入图片描述

to_date

将char或varchar2类型的string类型转换为date类型
例:
to_date: 转换之后都是固定的格式
select to_date(‘2022-2-22 22:22:22’,‘YYYY-MM-dd HH24:MI:SS’) from dual;
在这里插入图片描述

其它函数

条件函数:
decode,case when
例: 给不同部门的人员涨薪,10部门的人涨10%,20部门的人涨20%,30部门的人涨30%
select ename,sal,deptno,decode(deptno,10,sal * 1.1,20,sal * 1.2,30,sal * 1.3) from emp;
select ename,sal,deptno, case deptno when 10 then sal * 1.1 when 20 then sal * 1.2 when 30 then sal * 1.3 end from emp;
在这里插入图片描述

单行函数嵌套

  • 单行函数可以被嵌入到任何层。
  • 嵌套函数从最深层到最低层求值。

在这里插入图片描述
例: 显示员工雇佣期满6个月后下一个星期五的日期
select hiredate,next_day(add_months(hiredate,6),‘星期五’) from emp;
在这里插入图片描述
create table test(
id number(10) primary key,
type number(10) ,
t_id number(10),
value varchar2(5)
);
insert into test values(100,1,1,‘张三’);
insert into test values(200,2,1,‘男’);
insert into test values(300,3,1,‘50’);

insert into test values(101,1,2,‘刘二’);
insert into test values(201,2,2,‘男’);
insert into test values(301,3,2,‘30’);

insert into test values(102,1,3,‘刘三’);
insert into test values(202,2,3,‘女’);
insert into test values(302,3,3,‘10’);

select * from test;
在Oracle中创建上述表,要求写出一条查询语句结果如下:
姓名 性别 年龄
——————
张三 男 50
我们可以使用decode函数来解决此问题:
select decode(type, 1, value) 姓名,decode(type, 2, value) 性别,decode(type, 3, value) 年龄 from test;
在这里插入图片描述
由上述结果图可以发现和我们想要的结果不太一样,表中多了很多空行,这时我们可以对sql语句进行优化得到下面的结果。
select max(decode(type, 1, value)) 姓名,max(decode(type, 2, value)) 性别,max(decode(type, 3, value)) 年龄 from test group by t_id;
在这里插入图片描述
这是我们发现和想要的结果是一样的,但是还发现优化后的sql语句中多了max,上面单行函数好像没说max函数,所以接下来我们就要引入组函数的概念。

三、组函数

组函数基于多行数据返回单个值。
注意: 组函数,一般情况下,组函数都要和group by组合使用,还可用于选择列表或者having条件判断。
常用的组函数有五个:

avg(): 平均数,只适用于数值类型的数据。
min() : 最小值,适用于任何类型。
max() : 最大值,适用于任何类型。
count(): 记录数,处理的时候跳过空值而处理非空值,一般用来获取表中的记录条数,获取条数的时候可以使用 * 或者某一个具体的列,甚至可以使用纯数字来代替,但是从运行效率的角度考虑,建议使用数字或者某一个具体的列而不要使用 * 。
sum() : 求和,只适用于数值类型的数据。

例:
avg: select avg(sal) from emp;
在这里插入图片描述
min: select min(sal) from emp;
在这里插入图片描述
max: select max(sal) from emp;
在这里插入图片描述
count: select count(sal) from emp;
在这里插入图片描述
sum: select sum(sal) from emp;
在这里插入图片描述
特别注意,组函数是不能处理null,必须使用NVL函数迫使组函数包括空值。

数据分组

创建分组

  1. group by子句按照某些相同的值去分组操作。
  2. 除组函数语句外,select语句中的每个列都必须在group by子句中给出。
  3. 如果分组列中具有null值,则null值将作为一个分组返回。如果列中有多行null值,他们将分为一组。
  4. group by子句必须出现在where子句之后,order by子句之前

过滤分组(having子句)

  1. Where过滤行,having过滤分组。
  2. Having支持所有where操作符。

分组和排序

一般在使用group by子句时,应该也给出order by子句。
例:
求每个部门的平均薪水
select avg(sal) from emp group by deptno;
在这里插入图片描述
求平均薪水大于2000的部门
select avg(sal),deptno from emp group by deptno having avg(sal) > 2000;
在这里插入图片描述

  • 出现在SELECT列表中的字段,如果出现的位置不是在组函数中,那么必须出现在GROUP BY子句中。
  • 不能在WHERE子句中使用组函数;不能在WHERE子句中限制组;使用Having对分组进行限制。

例:
求部门下雇员的工资>2000的人数
select deptno,count(1) from emp where sal > 2000 group by deptno;
在这里插入图片描述
求部门薪水最高的人
select deptno,max(sal) from emp group by deptno;
在这里插入图片描述
求部门的平均薪水仅包括平均工资大于1000的部门
select deptno,avg(sal) from emp group by deptno having avg(sal) > 1000;
在这里插入图片描述

Selecct子句顺序

子句说明是否必须使用
select要返回的列或表达式
from从中检索数据的表仅在从表中选择数据时使用
where行级过滤
group by分组说明仅在按组计算聚集时使用
having组级过滤
order by输出排序顺序

Sql语句执行过程:

  1. 读取from子句中的基本表、视图的数据,[执行笛卡尔积操作]。
  2. 选取满足where子句中给出的条件表达式的元组。
  3. 按group by子句中指定列的值分组,同时提取满足having子句中组条件表达式的那些组。
  4. 按select子句中给出的列明或列表达式求值输出。
  5. order by子句对输出的目标表进行排序。

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

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

相关文章

Spring AI ETL 流水线

先纠正 Spring AI 使用本地 Ollama Embeddings 中的一个错误,当启动 Ollama 之后,Windows会有托盘图标,此时已经启动了 Ollama 的服务,访问 Embedding 时不需要运行 ollama run gemma ,只有访问 chat 时才需要启动一个…

React脚手架的搭建与使用

React脚手架是开发现代Web应用的必备,其充分利用Webpack、Babel、ESlint等工具辅助项目的开发,当然这些工具也无需手动配置即可使用,脚手架的意义更多的是关注的是业务而不是工具的配置;项目的整体技术架构为:react w…

ZYNQ NVME高速存储之EXT4文件系统

前面文章分析了高速存储的各种方案,目前主流的三种存储方案是,pcie switch高速存储方案,zynq高速存储方案,fpga高速存储方案。虽然三种高速存储方案都可以实现高速存储,但是fpga高速存储方案是最烂的,fpga…

天软因子数据系列课堂回顾——“委托订单:流动性因子”

高频因子库4月更新,新增5张表单,51个因子。目前,高频因子数量扩容到628个,涵盖了从2000年开始的全A市场。本次“天软因子数据系列课堂”在线分享的即是最新发布因子列表之一的流动性因子,剖析微观角度下因子的底层逻辑…

目标检测——输电线路缺陷数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

非洲美食多样性而丰富多彩

非洲美食因其地域广阔和民族多样性而丰富多彩,每个国家和地区都有独特的烹饪传统和饮食文化。以下列举一些非洲各地的代表性美食: 肯尼亚: Ugali:一种主要由玉米面制成的团状食物,搭配各种炖煮的蔬菜、豆类和肉类食用。…

档案数字化能为企业带来什么帮助

档案数字化为企业带来以下帮助: 1. 空间节省:数字化档案可以减少实体档案的存储空间需求,不再需要大量的文件柜和文件存储空间,从而帮助企业节约办公场地。 2. 检索便捷:数字化档案可以通过关键词搜索、标签分类等方式…

线性表的链式存储(单循环链表)

文章目录 前言一、循环链表是什么?二、单循环链表三、单循环链表基本操作的实现总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版…

js 函数节流和函数防抖及区别详解

文章目录 1. 前言2. 函数节流3. 函数防抖4. 总结 1. 前言 浏览器中总是有一些操作非常耗费性能。所以就有了函数节流和函数防抖来提高浏览器性能。 函数节流:频繁触发一个事件时候,每隔一段时间,函数只会执行一次。 函数防抖:当触…

【Java笔记】第4章:深入学习循环结构

前言1. 循环的理解2. while循环3. do...while循环4. for循环5. 循环的控制语句6. 循环的嵌套结语 ↓ 上期回顾: 【Java笔记】第3章:深入学习分支结构 个人主页:C_GUIQU 归属专栏:【Java学习】 ↑ 前言 各位小伙伴大家好!上期小编…

Spring 事务实现方式:

Spring 事务实现方式: Spring并不直接支持事务,只有当数据库支持事务的时候,Spring才支持事务,Spring只不过简化了开发人员实现事务的开发步骤 Spring事务的实现方式有两种: 一、基于申明式事务: Service…

ubuntu 16.04.7连不上网的解决方案

首先在编辑选项卡里找到虚拟网络编辑器, 点击更改设置 点击添加网络 点击确定 选择桥接模式,自动后点击应用,最后点击确定即可。

文件夹变白色文件,数据恢复全攻略助你轻松找回!

在日常的电脑使用中,你是否曾遇到过文件夹突然变成了白色文件的情况?这种看似无害的变化,实则可能隐藏着数据丢失的风险。当你发现原本正常的文件夹图标变成了无关联程序的白板图标,且无法正常打开时,内心无疑是焦虑不…

车载诊断系统应用方案选型,ESP8266方案让成本降低了35%,销售数据提升47%

车载诊断系统简称OBD,这个系统随时监控发动机的运行状况和尾气后处理系统的工作状态,一旦发现有可能引起排放超标的情况,会马上发出警示。当系统出现故障时,故障灯(MIL)或检查发动机(Check Engine)警告灯亮,同时OBD系统…

【JavaWeb】Day50.Mybatis的XML配置文件

XML配置文件规范 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。 在Mybatis中使用XML映射文件方式开发,需要符合一定的规…

C语言之文件操作【万字详解】

目录 一.什么是文件? 二.为什么要使用文件? 三.文件的分类 3.1.程序文件 3.2.数据文件 四.二进制文件和文本文件 五.文件的打开和关闭 (重点) 5.1流和标准流 5.1.1何为流? 5.1.2.标准流 5.2文件指针 5.3文件的打开和关…

【1425】java 外籍人员管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 外籍人员管理系统是一套完善的java web信息管理系统 采用serlvetdaobean,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff…

机器学习波士顿房价

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接:https://pan.baidu.com/s/1deECYRPQFx8h28BvoZcbWw?pwdft5a 提取码:ft5a --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

回归预测 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测&#xff0…

Vue3+Spring Boot3实现跨域通信解决办法

Vue3Spring Boot3实现跨域通信解决办法 1 跨域是什么?2 何为同源呢?3 解决办法3.1 全局配置3.1.1 实现CorsFilter过滤器3.1.2 实现SpringMVC配置类3.1.3 创建CorsFilterFactory工厂类返回CorsFilter对象 3.2 局部跨域3.2.1 注解配置3.2.2 手动设置响应头(局部跨域)…