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、转换函数

 

日期格式元素

含义

YYYYYY

代表四位、两位数字的年份

MM

用数字表示的月份

MON

月份的缩写、对中文月份来说就是全称

DD

数字表示的日

DY

星期的缩写,对中文的星期来说就是全称

HH24HH12

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() 适用任何类型数据

  

 

原文地址:https://www.cnblogs.com/eadela/p/11436066.html