oracle--单行函数和多行函数
单行函数
1、字符函数
函 数 |
功 能 |
示 例 |
结 果 |
INITCAP (char) |
首字母大写 |
initcap ('hello') |
Hello |
LOWER (char) |
转换为小写 |
lower ('FUN') |
fun |
UPPER (char) |
转换为大写 |
upper ('sun') |
SUN |
LTRIM (char, set) |
左剪裁 |
ltrim ('xyzadams', 'xyz') |
adams |
RTRIM (char, set) |
右剪裁 |
rtrim ('xyzadams', 'ams') |
xyzad |
TRANSLATE (char, from, to) |
按字符翻译 |
translate ('jack', 'abcd', '1234') |
j13k |
REPLACE (char, search_str, replace_str) |
字符串替换 |
replace ('jack and jue', 'j', 'bl') |
black and blue |
INSTR (char, substr[, pos]) |
查找子串位置 |
instr ('worldwide', 'd') |
5 |
SUBSTR (char, pos, len) |
取子字符串 |
substr ('abcdefg',3,2) |
cd |
CONCAT (char1, char2) |
连接字符串 |
concat ('Hello', 'world') |
Helloworld |
2、数值函数
函 数 |
功 能 |
示 例 |
结 果 |
ABS(n) |
取绝对值 |
abs(-15) |
15 |
CEIL(n ) |
向上取整 |
ceil(44.778) |
45 |
SIN(n) |
正弦 |
sin(1.571) |
.999999979 |
COS(n) |
余弦 |
cos(0) |
1 |
SIGN(n) |
取符号 |
sign(-32) |
-1 |
FLOOR(n) |
向下取整 |
floor(100.2) |
100 |
POWER(m,n ) |
m的n次幂 |
power(4,2) |
16 |
MOD(m,n) |
取余数 |
mod(10,3) |
1 |
ROUND(m,n) |
四舍五入 |
round(100.256,2) |
100.26 |
TRUNC(m,n) |
截断 |
trunk(100.256,2) |
100.25 |
SQRT(n) |
平方根 |
sqrt(4) |
2 |
3、日期函数
函 数 |
功 能 |
示 例 |
结 果 |
MONTHS_BETWEEN |
返回两个日期间的月份 |
months_between ('04-11月-05','11-1月-01') |
57.7741935 |
ADD_MONTHS |
返回把月份数加到日期上的新日期 |
add_months('06-2月-03',1) add_months('06-2月-03',-1) |
06-3月-03 06-1月-03 |
NEXT_DAY |
返回指定日期后的星期对应的新日期 |
next_day('06-2月-03','星期一') |
10-2月-03 |
LAST_DAY |
返回指定日期所在的月的最后一天 |
last_day('06-2月-03') |
28-2月-03 |
ROUND |
按指定格式对日期进行四舍五入 |
round(to_date('13-2月-03'),'YEAR') round(to_date('13-2月-03'),'MONTH') round(to_date('13-2月-03'),'DAY') |
01-1月-03 01-2月-03 16-2月-03 |
TRUNC |
对日期按指定方式进行截断 |
trunc(to_date('06-2月-03'),'YEAR') trunc(to_date('06-2月-03'),'MONTH') trunc(to_date('06-2月-03'),'DAY') |
01-1月-03 01-2月-03 02-2月-03 |
4、转换函数
日期格式元素 |
含义 |
YYYY、YY |
代表四位、两位数字的年份 |
MM |
用数字表示的月份 |
MON |
月份的缩写、对中文月份来说就是全称 |
DD |
数字表示的日 |
DY |
星期的缩写,对中文的星期来说就是全称 |
HH24,HH12 |
12小时或者24小时进制下的时间 |
MI |
分钟数 |
SS |
秒数 |
数字格式元素 |
含义 |
9 |
代表一位数字,如果该位没有数字则不进行显示,但对于小数点后面的部分仍会强制显示 |
0 |
代表一位数字,如果该位没有数字则强制显示0 |
$ |
显示美元符号 |
L |
显示本地货币符号 |
. |
显示小数点 |
, |
显示千分位符号 |
其他函数
nvl() nvl2() decode()
函 数 |
功 能 |
NVL(EXP1, EXP2) |
如果exp1的值为null,则返回exp2的值,否则返回exp1的值 |
NVL2(EXP1, EXP2, EXP3) |
如果exp1的值为null,则返回exp2的值,否则返回exp3的值 |
DECODE(VALUE,IF1,THEN1, IF2,THEN2,……,ELSE) |
如果value的值为if1,则返回then1的值,如果value的值为if2,则返回then2的值,……,否则返回else值 |
多行函数
单行函数学习
--查询工作为SALESMAN,MANAGER并且工资大于2500的员工信息
--1、使用小括号提升where筛选条件的执行优先级别
--2、and的优先级别高于or
select * from emp
select * from emp where job='SALESMAN' or job='MANAGER' and sal>2500
select * from emp where (job='SALESMAN' or job='MANAGER') and sal>2500
-----------------------------------------------------------------------------------------------------------
使用函数 单行函数 多行函数 转换函数 其他函数
--单行函数学习:不改变原始数据,只改变结果
---1、字符函数
select * from emp;
select INITCAP(ename) from emp;--initcap函数将首字母大写
select lower(ename)from emp;--lower 字母小写
select replace(ename,'S','M') from emp;--replace 替换
--2、数值函数--Math
----伪表 dual
select * from dual
select abs(-3) 绝对值,ceil(3.1415926)向上取整,floor(3.1415926)向下取整,power(2,3)幂,round(3.4)四舍五入 from dual
--3、日期函数
select months_between('13-12月-2016','13-10月-2016') from dual--months_between两个日期之间的月份数
多行函数学习
多行函数 :
max: max(字段名) 返回此字段的最大值
min:min(字段名) 返回此字段的最小值
avg:avg(字段名) 返回平均值
sum:sum(字段名) 返回字段的和
count:count
--count(*),用来查询表中有多少条记录
--count(字段名),用来查询某个字段有值的个数
--count(distinct 字段名),可以先去除重复再计数。
注意:
--多行函数不能和普通字段直接出现在查询语句中,除非group by
--多行函数和单行函数不能直接出现在查询语句中,除非group by
查看员工的最高工资
select max(sal),ename from emp--多行函数不能和普通字段直接出现在查询语句中,除非group by
select max(sal),lower(ename) from emp--多行函数和单行函数不能直接出现在查询语句中,除非group by
select ename from emp
查看员工的最低工资
select min(sal) from emp
查看员工的平均工资
select avg(sal) from emp
查看所有的员工工资之和
select sum(sal) from emp
查询公司有多少员工
select * from emp
select count(*) from emp--使用count(*)来查看一张表中有多少条记录
查询有津贴的员工人数
select count(comm) from emp--使用count(字段名),查询该字段有值的记录数
select count(ename) from emp
查询公司有多少工作种类
select count(job) from emp
select count(distinct job) from emp
转换函数学习
转换函数:在转换的时候改变的是数据的类型,数据内容不会改变,可以指定格式。
1、to_number:将数字字符转换为数字类型的数值,to_number(数字字符)
2、to_char:将数字转换为字符类型,将日期转换为字符类型 to_char(数字/日期)
3、to_date:将字符类型的日期转换为日期类型: to_date(char)
--------------------------------------------------------------------------------------
number-->char 转换的时候使用的是默认格式,
select to_char(123) from dual--将数字转换为字符类型,使用to_char(number)
select sal, to_char(sal) from emp
number-->char 使用指定的格式
to_char(number,'格式'),格式:
$代表美元符,9代码数字占位。例如,L999,999,999表示三位一组的显示方式L代表人民币符号,0代表保留数字个数,不足使用0补充。 select to_char(sal),to_char(sal,'L999,999,999') from emp
select to_char(sal),to_char(sal,'L0000.00') from emp
char--->number to_number(数字字符)
select to_number('123') from dual char--->date,转换的字符必须是日期格式的字符串,默认格式 dd-mm-yyyy
注意:因为字符串有很多,所以在字符转换为日期的时候,需要指定格式,因为日期是具备一定格式的字符组合。
字符转换为日期的时候,指定的格式为字符的日期顺序,无需指定间隔符。
yyyy:表示年 mm:表示月 dd表示日
select to_date('05-12月-2016') from dual;
select to_date('2016-05-12','yyyy-mm-dd') from dual--使用指定的格式将指定的日期字符串转换为日期
select to_date('12-05-2016','mm/dd/yyyy') from dual
date--->char
注意:因为日期本身就具备一定的格式在不是指定格式的情况下会默认使用dd-mm-yyyy格式显示数据
指定的格式会作为日期转换为字符串类型的显示格式存在。例如:
yyyy-mm-dd' ‘2016-12-05’
yyyy/mm/dd' '2016/12/05'
yyyy"年"mm"月"dd"日"' 2016年12月05日
select hiredate,to_char(hiredate) from emp--日期转换为字符的时候,不指定格式使用默认格式:dd-mm-yyyy
select hiredate,to_char(hiredate,'yyyy-mm-dd') from emp;--使用指定格式将日期转换为字符串类型
select hiredate,to_char(hiredate,'yyyy/mm/dd') from emp;--使用指定格式将日期转换为字符串类型
select hiredate,to_char(hiredate,'yyyy"年"mm"月"dd"日"') from emp;--使用指定格式将日期转换为字符串类型 查询入职日期在81年10月20日后的员工信息
第一种:自动转型
select * from emp where hiredate>'20-10月-1981'
第二种:将日期转换为字符串
select * from emp where to_char(hiredate,'yyyy-mm-dd')>'1981-10-20'
第三种:
select * from emp where hiredate>to_date('1981-10-20','yyyy/mm/dd')
其他函数:
单行函数:lower
多行函数:min max sum avg count
转换函数:to_number to_char to_date
-----------------------------------------------------------------------------------------
其他函数:
1、nvl():nvl(字段名,执行)--相当于java中的if条件判断
2、nvl2():nvl2(字段名,值,值)--相当于java中的If(){}else{}判断
3、decode():decode(字段名,条件1,执行内容1,条件2,执行内容2,条件3,执行内容3,默认执行内容)
相当于java中if(){}else if(){}else if(){}...else{}
查询所有员工的月薪及姓名和工作
select * from emp
select ename,sal 基本工资,comm 绩效,sal+comm 月薪 from emp
select ename,sal 基本工资,comm 绩效,sal+nvl(comm,0)月薪 from emp
查询所有员工的月薪及姓名和工作
select ename,sal 基本工资,comm 绩效,nvl2(comm,sal+comm,sal)月薪 from emp
显示员工的职称
select ename,job,decode(job,'MANAGER','经理','SALESMAN','销售人员','普通员工') from emp
单行函数分类
字符函数 数值函数 日期函数
转换函数 通用函数
多行函数
sum() avg() 仅适用数值型
count() max() min() 适用任何类型数据
oracle--单行函数和多行函数的更多相关文章
- SQL单行函数和多行函数
单行函数和多行函数示意图: 单行函数分为五种类型:字符函数.数值函数.日期函数.转换函数.通用函数 单行函数: --大小写控制函数 select lower('Hello World') 转小写, u ...
- Oracle-DQL 5- 分组函数(多行函数)
分组函数(多行函数):--针对表中的多行数据进行运算,返回一个结果 1.多行函数 --sum() 求和SELECT SUM(sal) FROM emp; --avg() 求平均值SELECT AVG( ...
- Oracle01——基本查询、过滤和排序、单行函数、多行函数和多表查询
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7272236.html Oracle的集群 Oracle的体系结构 SQL> --当 ...
- DQL---条件查询、单行函数、多行函数、分组函数、数据类型
一.DQL 1.基本规则: (1)对于日期型数据,做 *,/ 运算不合法,可以进行 +, - 运算.比如给日期加一天或减一个月,结果仍为一个日期.两个日期间只能为减法,返回两个日期相差的天数,两个日期 ...
- 5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)
1 多行函数(理解:有多个输入,但仅仅输出1个结果) SQL>select count(*) from emp; COUNT(*) ------------- 14 B 字符函数Lowe ...
- Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项
目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...
- Oracle 单行函数
一.什么是函数 任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称为函数. 二.单行函数简介 单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果.单行函数可以接受一 ...
- Oracle Day3 多行函数、多表查询
1.多行函数 Sum avg max min count 组函数具有滤空的作用(添加nvl屏蔽该功能) 分组group by 多行分组 分组过滤 where 和分组过滤的区别(having) 分组的增 ...
- Oracle学习第三篇—多行函数
0 order by asc/desc 默认升序 order by 列的名字|表达式|别名|序号 把空放在后边:order by desc nulls last 1分组函数--会自动滤空值 count ...
随机推荐
- DDD领域驱动设计初探(四):WCF搭建
前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储.领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再项目搭建的过程中慢慢引入,博主的思路是先将整个架构走通,然后一步一步来添加 ...
- spring动态调用方法
有的时候为了程序的灵活性,需要根据参数动态的调用方法.代码框架大致spring为主,下面是具体代码: 接口: 实现类(实现类中有一个从spring容器中取的对象) 这是最初我直接用反射去调用的代码: ...
- Django【第28篇】:优化查询的方式
优化查询的方式 一.假设有三张表 Room id 1 2 .. 1000 User: id 1 .. 10000 Booking: user_id room_id time_id date 1 1 8 ...
- js 遍历数组取出字符串用逗号拼接
var arr = [{"name":"hhh"},{"name":"dddd"}] //用js function ge ...
- Sql server时间转时间long
DATEDIFF( S, '1970-01-01 00:00:00', a.endor_date ) - 8 * 60*60 ) actionTime, SELECT DATEADD(S,116070 ...
- [BZOJ2244]:拦截导弹(DP+CDQ分治+树状数组)
题目传送门 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高于 ...
- HTML,CSS,JavaScript的思维导图
一个思维导图是把抽象的事物具体化,以一个东西为思想核心内容,映射出一系列的组成及作用 影响的内容. HTML的思维导图 HTML是一种超文本标记语言.我认为要学习一门语言首先要知道其是什么,编辑工具是 ...
- Oracle诊断: 服务器启后,无法连接
Oracle 服务器启后,使用Toad 客户端连接oracle 时候,遇到下面的错误: oracle ORA-12514: TNS: no listener TNS: listener does no ...
- oracle 如何更改密码的hash
如何迁移oracle user的密码到新的环境,一下列出了方法: select name,spare4||';'||password pwd from sys.user$ where name = ' ...
- 【洛谷P1983 车站分级】
这题好像是个蓝题.(不过也确实差不多QwQ)用到了拓扑排序的知识 我们看这些这车站,沿途停过的车站一定比未停的车站的级别高 所以,未停靠的车站向已经停靠的车站连一条边,入度为0的车站级别就看做1 然后 ...