Oracle内置函数
1.内置函数的分类
- 内置函数:Oracle自带的函数,只需要调用就可以了,不需要去定义
- Oracle里面的内置函数分为如下几类:
- 转换函数;对数据类型转换
- 日期函数;
- 字符函数;
- 数字函数;
- 集合函数;
2.转换函数
2.1 to_char();
- 作用:把一个非字符类型转换为字符类型;
--调用当前的系统日期
select sysdate from dual;
--日期类型转字符类型
--转换当前系统时间为字符串类型,时间格式为:xxxx-xx-xx xx:xx:xx
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
--转换当前系统时间为字符串类型,只显示年月日,时间格式为:xxxx-xx-xx
select to_char(sysdate,'yyyy-mm-dd')from dual;
--转换当前系统时间为字符串类型,并且显示是24小时制,时间格式为:xxxx年xx月xx日 xx:xx:xx
select to_char(sysdate,'yyyy"年"-mm"月"-dd"日" hh24:mi:ss') from dual
2.2 to_date();
- 作用:把字符类型大的时间转换为日期类型;
--把字符类型时间 '2021-08-18' 转换成日期类型,格式为:xxxx/xx/xx;
select to_date('2021-08-18','yyyy/mm/dd') from dual
--把字符类型时间 '2021-08-18 11:33:44' 转换成日期类型,格式为:xxxx/xx/xx xx:xx:xx;
select to_date('2021-08-18 11:33:44','yyyy/mm/dd hh:mi:ss') from dual
2.3 to_number();
- 作用:把字符字符类型的数字转换为数值类型;
select 1+to_number('1') from dual;
3.日期函数
3.1 add_months()
- 作用:在指定的日期上加上指定数量的月份,求当前的日期;
- 注意:这个只能作用于日期类型;
--求当前系统时间100个月之后的日期;
select add_months(sysdate,100) from dual;
--求2020年8月8日,100个月之后的日期;
select add_months(to_date('2020-8-8','yyyy-mm-dd'),-2) from dual;
--求2020年8月8日,100个月之前的日期;
select add_months(to_date('2020-08-08','yyyy-mm-dd'),-100)from dual;
3.2 extract()
- 作用:单独取日期里面的年月日;
- 注意:只能作用与日期类型;
--取当前系统时间的年份
select extract(year from sysdate)from dual;
--取当前系统的月份
select extract(month from sysdate)from dual;
--取当前系统时间日期
select extract(day from sysdate)from dual;
--求emp表里2月份入职人数
select count(*)from emp where extract(month from hiredate)=2;
--求emp表里每个月入职的人数
select extract(month from hiredate),count(*)from emp group by extract(month from hiredate);
3.3 months_between()
- 作用:求两个时间之间相差的月份;
- 注意点:只能作用于日期类型;
-- 求2020-2-2和当前系统时间之间相差的月份;
select months_between(sysdate,to_date('2017-02-02', 'yyyy/mm/dd')) from dual;
3.4 Last_day()
- 作用:求本月的最后一天;
--求当前月份的最后一天日期;
select last_day(sysdate) from dual;
--求2021年的最后一天;
select last_day(to_date('2021-12', 'yyyy-mm'))from dual;
3.5 Next_day()
- 作用:求下个指定星期的日期;
- 注意点:只能作用于日期类型;
--求下周六的日期;
select next_day(sysdate,'星期六')from dual;
4.字符函数
select upper('abcdAsdfa') from dual;
--全部转为大写;
select lower('abcdAsdfa') from dual;
--全部转为小写;
select trim('abcd','a') from dual;
--去掉左边的字符(第一个字符若是a则去除,反之不去除);
select trim ('acccsdfdsccccbcd','c') from dual:
--去掉右边的字符(第一个字符若是c则去除,反之不去除);
select initcap('adad') from dual;
--将首字母转换为大写;
select substr('abcdefghi',3,4) from dual;
--从第三位开始截,截4个;
select instr('abcdefg', 'c') from dual;
--判断c的位置,下标从1开始;
select concat ('aa', 'bb') from dual;
--这是拼接的意思,用的少,因为我们可以用||代替;
select ascii('a') from dual;
--求a的ic码;
select char(77) from dual;
--将ic码转换成对应的值字符;
select length ('abcd张') from dual;
--求字符的个数,不是字节的个数;
select (pad ('abde' ,9,'x') from dual;
--左填充,从左边开始用x’填充,直到字节的长度变为9为止;
select rpad ('abde' ,9,'x') from dual;
--右填充,从边开始用x填充,直到字节的长度变为9为止;
select decode('c', 'a',1,'b',2,'c',3) from dual;
--结果为3,意思是给几个结果进行判断,如果前面的符是a就输出1,如果是b就输出2,如果是c就输出3;
5.数学函数
select ceil (57.12) from dual;
--向上取整;
select floor (57.98) from dual;
--向不取整;
select round (54.99) from dual;
--结果是55,四舍五入;
select round (54.59,1) from dual;
--四舍五入并且保留小数点后1位数;
select power (3,2) from dual;
--3的2次方
select mod (6,7) from dual;
--取余/模;
select sqrt (4) from dual;
--开根号;
select sign (0) from dual;
--如果是正数结果就为1,如果是负数结果就为-1,如果是0,结果就为0;
6.综合案例
如果薪水小于3500就输出“要努力”,如果等于3500就输出“刚刚好”,如果大于3500就输出“要纳税”
select ename, decode(sign(sal-3500),1,'要纳税',0,'刚刚好',-1,'要努力')from emp;
7.聚合函数
7.聚合函数.
- sum, max, min, avg, count。