oracle-函数

1. 函数概述

1.函数的作用:
	方便数据的统计
	处理查询结果
2.函数分类:
	数值函数
	字符函数
	日期函数
	转换函数
3.在查询中使用函数:
	将小写字母转换成大写
	查询时间间隔
	四舍五入

2. 数值函数

1.四舍五入
	ROUND(n[,m])
	-- n表示要进行四舍五入的值
	-- m表示保留小数点后几位或前几位
	-- 省略m:0
	-- m>0:小数点后m位
	-- m<0:小数点前m位
	
		eq: select round(23.4),round(23.45,1),round(23.45,-1) from dual; --23  23.5  20
2.取整函数
	CEIL(n)-- 取最大值
	FLOOR(N)-- 取最小值
	
		eq: select ceil(23.45) from dual;  -- 24
			select floor(23.45) from dual; --23
3.常用计算
	ABS(n) --取绝对值
	
		eq: select abs(23.45),abs(-23),abs(0) from dual; -- 23.45  23   0
	MOD(m,n) --取余数 
	-- 如果m和n中有 一个值为null值,则结果返回null值
		
		eq: select mod(5,2) from dual; -- 1
		    select mod(5,null) from dual; -- null
		    select mod(null,5) from dual; -- null
	POWER(m,n) -- 表示返回m的n次幂
		2*2*2用 power(2,3)表示
		
		eq: select power(2,3),power(null,2) from dual; -- 8 null
	SQRT(n) -- 求平方根
		16的平方根表示为 sqrt(16),结果为4
		
		eq: select sqrt(16) from dual; --4
4.三角函数
	SIN(n)    -- 正弦
	ASIN(n)   -- 反正弦
	COS(n)    -- 余弦
	ACOS(n)   --反余弦
	TAN(n)	  --正切
	ATAN(n)   --反正切
		n均为弧度
		
		eq:  select sin(3.124) from dual; -- .017591746

3. 字符函数

大小写转换函数
	UPPER(char)  -- 小写-> 大写
	LOWER(char)  -- 大写-> 小写
	INITCAP(char) -- 首字母大写
	
		eq: select upper('abde'),lower('ADe'),initcap('asd') from dual; -- ABDE  ade  Asd
获取子字符串函数
	SUBSTR(char,[m[,n]])  
	-- char : 源字符串  m: 取子串的开始位置    n: 截取子串的位数
	-- n可以省略 当n省略时表示从m的位置截取到字符串末尾
	-- m为0,表示从字符串的首字母开始截取
	-- m为负数,表示从字符串的尾部开始截取
	
		eq: select substr('abcde',2,3),substr('abcde',2),substr('abcde',-2,1) from dual; -- bcd  bcde   d
获取字符串长度函数
	LENGTH(char)
	
		eq: select length('acde ') from dual;  -- 5
字符串连接函数
	CONCAT(char1,char2)
	与 || 操作符的作用一样
	
		eq: select concat('ab','cd') from dual;  -- abcd
去除子串函数
	TRIM(c2 FROM c1)
		 
		 eq: select trim('a' from 'aabcde')  from dual; -- bcde
	LTRIM(c1[,c2])
	
	 	 eq: select ltrim('aabaaxaa' , 'a')  from dual; -- baaxaa
	RTRIM(c1[,c2])
	
	 	eq: select rtrim('aabaaxaa' , 'a')  from dual; -- aabaax
	TRIM(c1) -- 去除左右的空格
	LTRIM(c1) -- 去除左边的空格
	RTRIM(C2) -- 去除右边的空格
替换函数
	REPLACE(char,s_string[,r_string])
	-- 省略r_string用空格替换
	
		eq: select replace('abcde','a','A') from dual; -- Abcde
		 	select replace('abcde','a') from dual;  -- bcde

4. 日期函数

系统时间
	SYSDATE
	默认格式:DD-MON-RR (日-月-年)
		
		eq: select sysdate from dual; -- 23-4月 -21
日期操作
	ADD_MONTHS(date,i) 
	-- 返回在指定日期上添加的月份
	-- i可以是任何整数
	-- 如果i是小数,则截取整数部分
	-- 如果i是负数,则相当于为原日期减去月份
		eq: select add_months(sysdate,3),add_months(sysdate,-3) from dual; --   23-7月 -21     23-1月 -21
	
	NEXT_DAY(date,char)
	-- 如果char的值是‘星期一’,则返回date指定日期的下周一是哪天
		eq: select next_day(sysdate,'星期一') from dual; --   26-4月 -21
	
	LAST_DAY(date)
		eq: select last_day(sysdate) from dual; --   30-4月 -21
	
	MONTHS_BETWEEN(date1,date2)
	-- 两个日期之间相隔的月份
		eq: select months_between('20-5月-15','10-1月-15') from dual; -- 4.32258065
	
	EXTRACT(date FROM datetime)
		eq: select extract(year from sysdate) from dual; -- 年 2021
			select extract(month from sysdate) from dual; -- 月 4
			select extract(day from sysdate) from dual; -- 日 23
			select extract(hour from timestamp '2015-10-1 17:25:13') from dual;-- 小时 17
			select extract(minute from timestamp '2015-10-1 17:25:13') from dual;-- 分钟 25
			select extract(second from timestamp '2015-10-1 17:25:13') from dual;-- 秒 13

5. 转换函数

日期转换成字符的函数
	TO_CHAR(date[,fmt[,params]])
	-- date :将要转换的日期
	-- fmt: 转换的格式
	-- params: 日期的语言
	-- 日期默认的格式: DD-MON-RR
	-- YY YYYY TEAR
	-- MM MONTH
	-- DD DAY
	-- HH24 HH12
	-- MI SS
		eq: select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; --  2021-04-23 14:26:59
		    select to_char(sysdate,'YYYY-MM-DD HH12:MI:SS') from dual; -- 2021-04-23 02:27:55
字符转换成日期的函数
	TO_DATE(char[,fmt[,params]])
	-- params: 用于指定日期的语言
	-- fmt: 转换的格式
		eq: select to_date('2021-04-23','YYYY-MM-DD') from dual;  --  23-4月 -21
	-- to_date() 按照系统默认格式显示日期
数字转换成字符的函数
	TO_CHAR(number[,fmt])
	-- 9 : 显示数字并忽略前面的0
	-- 0 : 显示数字,位数不足,用0补齐
	-- . 或 D : 显示小数点
	-- ,或 G : 显示千位符
	-- $ : 美元符号
	-- S : 加正负号(前后都可以)
		 eq: select to_char(12345.678,'$99,999.999') from dual; -- $12,345.678
		 	 select to_char(12345.678,'S99,999.999') from dual; -- +12,345.678
字符转换成数字的函数
	TO_NUMBER(char[,fmt])
	-- fmt: 转换的格式,可以省略
		eq: select to_number('$1,000','$9999') from dual; -- 1000

6. 在查询语句中使用函数

在查询中使用字符函数
	在员工信息表中查询出员工的生日
		根据员工身份证号码得到员工生日
		 create table users(id varchar2(10),name varchar2(11),cardid varchar2(18),deptno varchar2(10),regdate date,age number(4,0));
		 insert into users values(1,'abc','123456199205051234','01',sysdate,31);
		 select substr(cardid,7,8) from users; -- 19920505
	将部门号01全部替换成'信息技术'
		select replace(deptno,'01','信息技术') from users;
在查询中使用数值函数
	将员工信息表中的年龄字段与10取余数
		select mod(age,10) from users; -- 1
在查询中使用日期函数
	取得员工入职的年份
		select extract(year from regdate) from users;
	查询出4月份入职的员工信息
		select * from users where extract(month from regdate)=4;
上一篇:Oracle获取序列值


下一篇:oracle如何实现自增?----用序列sequence的方法来实现