Oracle数据库----函数
--大小写控制函数
--upper
select * from emp where job = upper('salesman');
--lower
select * from emp where lower(job) = 'clerk';
--initcap
select empno, initcap(ename) from emp;
--upper、lower、initcap这三个函数的共同点,如果输入参数值为null时,则返回null
select empno, initcap(null) from emp;
--字符控制函数
--字符串连接符,实现雇员名与工资两列的连接
select ename || ':' || sal from emp;
--字符串连接的函数concat,实现雇员名与工资两列的连接
select concat(concat(ename,':'),sal) from emp;
--截串函数 substr
select * from emp where substr(job,1,4) = 'SALE';
--求字符串长度的函数 length
select * from emp where length(ename) = 6;
--instr 求子串在字符串中的位置
select instr('hello oracle','oracle') from dual;
select instr('hello oracle hello oracle', 'oracle', 1, 2) from dual;
--左填充函数 lpad
select lpad(job,9,'*') from emp;
--右填充函数 rpad
select rpad(job, 9, '*') from emp;
--替换函数 replace
select replace('hello oracle','oracle','world') from dual;
--四舍五入的函数 round
--求员工的日工资
select round(sal/30,2) from emp;
--截断函数 trunc
select round(sal/30,2),trunc(sal/30,2) from emp;
--求余数的函数 Mod
--求员工号为偶数的员工信息
select * from emp where mod(empno,2)=0;
--sysdate
select sysdate-1 昨天 , sysdate 今天, sysdate+1 明天 from dual;
--months_between
select round(months_between(sysdate,hiredate)/12)from emp;
--add_months
select ename,add_months(hiredate,30*12) from emp;
--next_day
select next_day(sysdate,'星期一')from dual;
--last_day
select sysdate,last_day(sysdate) from dual;
select empno,ename,last_day(hiredate) from emp;
--round
select hiredate, round(hiredate,'YEAR'), round(hiredate,'MONTH') from emp where empno=7654;
--trunc
select hiredate, trunc(hiredate,'YEAR'), trunc(hiredate,'MONTH') from emp where empno=7654;
--隐式数据类型转换的举例
select * from emp where sal>'2000';
select * from emp where hiredate='02-4月-81';
--to_char 日期类型转换成字符类型
select to_char(hiredate,'YYYY-MM-DD') from emp;
select to_char(hiredate,'YYYY"年"MM"月"DD"日"') from emp;
select to_char(hiredate,'DD-MON-RR','NLS_DATE_LANGUAGE=AMERICAN') from emp;
--to_char 数值类型转换成字符类型
select sal,to_char(sal,'L0,000,000.00')from emp;
select sal,to_char(sal,'L9,999,999.99')from emp;
select sal,to_char(sal,'$9,999,999.99')from emp;
--to_date 字符类型转换成日期类型
select ename,hiredate from emp where hiredate>to_date('1981-12-31','YYYY-MM-DD');
--to_number 字符类型转换成数值类型
select ename,sal from emp where sal>to_number('¥2000','L99999');
--nvl
select ename,sal,comm,sal+nvl(comm,0) from emp;
--nvl2
select ename,sal,comm,nvl2(comm,comm+sal,sal) from emp;
--nullif
select empno,ename,hiredate,nullif(hiredate,trunc(sysdate,'MONTH'))from emp;
--coalesce
select ename,sal,comm,coalesce(sal+comm,sal) from emp;
--想显示全部雇员的职位,但是这些职位要求替换为中文显示:
--
--CLERK:办事员;
--SALESMAN:销售;
--MANAGER:经理;
--ANALYST:分析员;
--PRESIDENT:总裁;
--case表达式
select empno,ename,
case job
when 'CLERK' then '办事员'
when 'SALESMAN' then '销售'
when 'MANAGER' then '经理'
when 'ANALYST' then '分析员'
else '总裁'
end
from emp;
--decode函数
select empno,ename,job,decode(job,'CLERK','办事员','SALESMAN','销售','MANAGER','经理','ANALYST','分析员','总裁')from emp;
--case表达式,区间值的判断
select empno,ename,sal,
case when sal<2000 then '低'
when sal<5000 then '中'
else '高'
end
from emp;
--参照雇员信息表,想显示距聘用日期3个月后的下一个星期一的日期,且日期格式如:2017-01-06。
select empno,ename,to_char(next_day(add_months(hiredate,3),'星期一'),'YYYY-MM-DD') new_date
from emp;
--参照雇员信息表,显示雇员日薪并四舍五入到2 位小数的结果,然后对薪资格式以‘¥ 1,182.19’这样的例子形式进行格式化
select empno,ename,sal,to_char(round(sal/30,2),'L9,999.99')
from emp;
--求平均值avg
select avg(sal) from emp;
--求和sum
select sum(sal) from emp;
--求最大值max
select max(sal) from emp;
--求最小值min
select min(sal) from emp;
--计数函数count
select count(*) from emp;
select count(empno) from emp;
--统计一下部门的个数
select count(deptno) from emp;
--在分组函数中通过distinct关键字来去除重复的记录
select count(distinct deptno) from emp;
--行转列wm_concat
select wm_concat(ename) from emp;
--求员工的平均工资
select sum(sal)/count(*) 方法一, sum(sal)/count(sal) 方法二, avg(sal) 方法三 from emp;
--求员工的平均补助
select sum(comm)/count(*) 方法一, sum(comm)/count(comm) 方法二, avg(comm) 方法三 from emp;
select count(*),count(nvl(comm,0)) from emp;
select comm from emp;
--不忽略空值
select avg(nvl(comm,0)) from emp;
--忽略空值
select avg(comm) from emp;
--求出每个部门的平均工资,要求显示:部门号,部门的平均工资
select deptno,avg(sal) from emp group by deptno;
--多列分组
--按不同的部门,不同的职位,计算员工的平均工资
select deptno,job,avg(sal) from emp group by deptno,job order by deptno;
--求出每个部门的平均工资,要求显示:每个部门的平均工资。
select avg(sal)from emp group by deptno;
--求出每个部门的员工姓名,要求显示:部门编号、员工姓名
select deptno,wm_concat(ename)from emp group by deptno;
--求平均工资大于2500的部门,要求显示:部门号,平均工资
--select deptno,avg(sal) from emp where avg(sal)>2500 group by deptno;
--如果条件中包含分组函数,需要通过having子句对分组结果进行过滤
select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;
--在条件中如果没有分组函数,推荐使用where子句,可以先过滤后分组来提高效率
select deptno,avg(sal) from emp where deptno=10 group by deptno;
--求部门平均工资的最大值
--嵌套分组函数要与group by子句一起使用
select max(avg(sal)) from emp group by deptno;
Oracle数据库----函数的更多相关文章
- Oracle数据库——函数 http://www.jb51.net/article/40469.htm
1====分析函数 相当于把分组后的结果加到每一行里 SELECT t.loan_contract_no,t.loan_name,t.loan_amount,ROWNUM, row_number ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- Oracle数据库DECODE函数的使用.
decode函数是Oracle数据库独有的. 语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 例子:select decode(sign(变量1-变量2) ...
- Oracle数据库之PL/SQL过程与函数
Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...
- Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等
count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age ...
- Oracle数据库入门——sql语句和函数详解
一.oracle常用数据类型 一. 数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构 ...
- Oracle数据库从入门到精通 单行函数问题
视频课程:李兴华 Oracle从入门到精通视频课程 学习者:阳光罗诺 视频来源:51CTO学院 Oracle数据库从入门到精通-单行函数 在数据库中,为了方便用户的数据开发,往往会提供一系列的支持函数 ...
- Oracle数据库to_date函数注意事项
使用PL/SQL连接到Oracle数据库服务器,执行一条update语句: update pjnl set transtime = to_date('2015-05-14 12:13:20','yyy ...
- Oracle数据库之六 单行函数
六.单行函数 6.1.认识单行函数 函数就是和 Java 语言之中的方法的功能是一样的,都是为了完成某些特定操作的功能支持,而在 Oracle 数据库里面也包含了大量的单行函数,这些函数掌握了以后 ...
随机推荐
- WPF滚动条嵌套,响应鼠标滑轮事件的处理
在C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果是鼠标滚动整个S ...
- TinyMCE插件CodeSample前后端应用
后端使用插件CodeSample方法: <html> <textarea id="editor_id" name="content" plac ...
- ADB 基础命令使用
1.adb shell(>=2个设备显示:error: more than one device/emulator,仅连接一个设备可用) adb -d shell 只运行在真实设备中 adb - ...
- .NET错误提示之:无法更新EntitySet“TableName”因为它有一个DefiningQuery
使用LINQ 进行提交数据时发生的错误提示 原因:提交的对象表 没有设主键.
- Delphi与Windows 7下的用户账户控制(UAC)机制(有可能需要取消enable runtime themes)
WIN7/WIN8/WIN10, Vista提供的UAC机制,它的主要目的是防止对于操作系统本身的恶意修改.对于Delphi程序的影响,UAC主要在于以下几点:1.由于UAC机制,Delphi对于系统 ...
- qt5.6 webengine兼容xp的编译方法
http://www.qtcn.org/bbs/read-htm-tid-62470.html http://stackoverflow.com/questions/31678657/qtwebeng ...
- Qt 不规则窗体 – 鼠标点击穿透(Linux也可以,有对x11的配置的方法)
之前写过如何用 Qt 现成的方法写出无边框半透明的不规则窗体:<Qt 不规则窗体 – 无边框半透明> 其实有一个很特殊的窗体属性一直以来都伴随着不规则窗体出现,这就是本文要介绍的鼠标点击穿 ...
- ASP.NET Core 通过 Microsoft.DotNet.Watcher.Tools 实现热部署
之前开发前端的时候,webpack 会有热更新工具,在修改了代码之后,自动将代码编译,实时展现到页面上,给开发带来了极大的方便. Java也可以通过第三方插件JRebel实现热部署,不用频繁的重启To ...
- Ural_1169_Pairs
此题略坑... 思路:把N个点分成m若干个联通子图,然后用m-1个桥把这m个联通子图连接起来即可. 若每个联通子图内部都是完全图也符合题意,但答案却是Wrong Answer,只有把每个联通子图内部当 ...
- 3016C语言_函数
第六章 函数 6.1 函数概述 定义 函数:是具有一定功能的一个程序块:是C语言的基本组成单位. 在前面各章的例子及读者自己编写的C语言程序中都用到了以“main“开头的主函数,并且在程序中频繁地调用 ...