什么是函数???
函数: 解决某一个特定问题的一组代码的集合。
所有的函数都有零个或多个输入参数,至少有一个输出参数
在oracle数据中函数可以分为系统函数和自定义函数两类
系统函数包括:
数学函数
abs ceil floor power mod round trunc sign
abs – 取绝对值
select abs(-123) from dual;
ceil – 向上取整(获取大于当前数字的最小整数)
select ceil(-123.5) from dual;
floor – 向下取整 (获取小于当前数字的最大整数)
select floor(123.5) from dual;
— 查询所有学生年龄信息,如果足月了年龄+1 否则年龄不变。
round – 四舍五入
select round(3.56) from dual;
trunc – 只舍不入
select trunc(3.56) from dual;
– 对于一个复杂的数字要保留指定小数位的时候可以使用
select round(3.1415926,3) from dual;
sign 判断一个数字是整数还是负数 -1 1 0
select sign(112312323) from dual;
select power(2,3) from dual;
mod 取余数 取模
select mod(10,2) from dual;
字符串函数
initcap lower upper length lengthb
ltrim rtrim trim
substr
concat
initcap – 将指定字符串首字母转大写
select initcap(‘shenlixiang’) from dual;
lower – 将字符串全部转小写
select lower(‘SHENLIXIANG’) from dual;
upper – 将字符串全部转大写
select UPPER(‘shenlixiang’) from dual;
select * from emp;
select lower(e.ename) enamesec ,e.* from emp e;
select * from emp where lower(ename)=‘scott’;
length – 获取字符串的字符长度
select length(‘wo爱bei京天安门’) from dual;
lengthb – 获取字符串的字节长度
select lengthb(‘wo爱bei京天安门’) from dual;
ltrim – 去掉字符串左边空格
select ltrim(’ admin ‘) from dual;
rtrim – 去掉字符串右边的空格
select rtrim(’ admin ‘) from dual;
trim – 去掉字符串两端的空格
select trim(’ admin ') from dual;
– 去掉字符串左侧的指定字符
select ltrim(‘admin’,‘ad’) from dual;
– 字符串截取函数
substr(str,m,n);
对字符串str进行截取,从第m位开始,共截取n位
select substr(‘administrator’,2,5) from dual;
select substr(‘administrator’,-5,5) from dual;
concat – 字符串拼接
select concat(‘admin’,‘istrator’) from dual;
– 把部门id与部门名称进行拼接
select concat(deptno,dname) from dept;
– 注意 一般在oracle中不使用concat对字符串拼接
– 通常会使用||进行字符串拼接
select deptno||dname from dept;
translate – 字符替换
语法: translate (‘字符串’,‘需要被替换的字符’,‘新的字符’)
用新的字符替换掉旧的字符
select translate(‘administrator’,‘ai’,’$#’) from dual;
replace – 字符串替换
replace (‘字符串’,‘需要被替换的字符串’,‘新的字符串’)
用新字符串替换就字符串
select replace(‘administrator’,‘ad’,’$#’) from dual;
– 日期函数
1、 获取当前系统时间
select sysdate from dual;
2 获取两个日期之间的月份间隔
months_between(开始时间,结束时间)
select abs(months_between(to_date(‘2020-09-06’,‘yyyy-mm-dd’),sysdate))
from dual;
select months_between(sysdate,to_date(‘2020-09-06’,‘yyyy-mm-dd’))
from dual;
获取两个日期之间的天数间隔
select floor(sysdate - to_date(‘2020-09-06’,‘yyyy-mm-dd’))ts
from dual;
– 获取两个日期之间的年份间隔
– 月份间隔/12 = 年份间隔
3、月份增加
add_months 在指定日期上添加指定月数
获取下个月的今天的日期
select add_months(sysdate,1) from dual;
获取明年今日的日期
select add_months(sysdate,12) from dual;
在指定日期上加 1天
select sysdate + 1 from dual;v
在指定日上减1天
select sysdate -1 from dual;
– 获取下一个星期的第几天(星期几)
– 星期日默认为一周的第一天
next_day
获取下一个,星期的第一天
select next_day(sysdate,1) from dual;
获取下一个,星期的第4天
select next_day(sysdate,4) from dual;
– 获取本月最后一天
last_day
select last_day(sysdate) from dual;
– 获取本月的第一天
select add_months(last_day(sysdate)+1,-1) from dual;
– 本周的第一天
select next_day(sysdate,1)-7 from dual;
四、 类型转换函数
to_char to_date to_number
– to_char 将日期或数字转换成字符串
– to_date 将字符串转换成日期格式
–to_number 将字符转换成数字
create table tet1(
tid varchar2(10),
tname varchar2(10)
);
insert into tet1 (TID, TNAME)
values (‘1’, ‘湖北省’);
insert into tet1 (TID, TNAME)
values (‘2’, ‘河南省’);
insert into tet1 (TID, TNAME)
values (‘3’, ‘河北省’);
insert into tet1 (TID, TNAME)
values (‘11’, ‘襄阳市’);
insert into tet1 (TID, TNAME)
values (‘22’, ‘南阳市’);
insert into tet1 (TID, TNAME)
values (‘33’, ‘石家庄’);
insert into tet1 (TID, TNAME)
values (‘111’, ‘枣阳市’);
insert into tet1 (TID, TNAME)
values (‘222’, ‘镇平镇’);
insert into tet1 (TID, TNAME)
values (‘333’, ‘台儿庄镇’);
insert into tet1 (TID, TNAME)
values (‘1111’, ‘七方镇’);
insert into tet1 (TID, TNAME)
values (‘2222’, ‘脂肪村’);
insert into tet1 (TID, TNAME)
values (‘3333’, ‘台儿庄’);
– 查询,并将id进行排序
select * from tet1 order by to_number(tid) ;
– to_date 将字符串转换成日期
– 计算今天距离2021年10月1日还差几天
select to_date(‘2021-10-01’,‘yyyy-mm-dd’) - sysdate from dual;
create table testdate(
aa date
);
insert into testdate values(to_date(‘2012-12-12’,‘yyyy-mm-dd’));
– to_char 将数字或日期转换成字符串
select to_char(111)||‘222’ from dual;
– 年份
select to_char(sysdate,‘yyyy’) from dual;
– 一年之内的第几个月
select to_char(sysdate,‘mm’) from dual;
– 一个月中第几天
select to_char(sysdate,‘dd’) from dual;
– 一周中的第几天
select to_char(sysdate,‘d’) from dual;
– 一年中的第几天
select to_char(sysdate,‘DDD’) from dual;
–一个月中的第几周
select to_char(sysdate,‘W’) from dual;
–一年中的第几周
select to_char(sysdate,‘WW’) from dual;
– 一年中的第几季度
select to_char(sysdate,‘Q’) from dual;
select to_char(sysdate,‘yyyy-mm’) FROM DUAL;
select to_char(sysdate,‘hh’) from dual;
select to_char(sysdate,‘HH24’) from dual;
select to_char(sysdate,‘mi’) from dual;
select to_char(sysdate,‘ss’) from dual;
—其他函数 ----------------
nvl – 判断指定的数字是否为空,如果为空则给定一个默认值
语法: nvl(字段名,默认值)
create table monthdb(
mm number, – 月份
money number(11) – 收入
);
insert into monthdb values(1,11);
insert into monthdb values(2,22);
insert into monthdb values(3,NULL);
insert into monthdb values(4,NULL);
insert into monthdb values(5,NULL);
insert into monthdb values(6,1);
select count(money) ys ,sum(money) from monthdb;
select mm ,money ,nvl(money,0) from monthdb;
– decode 判断指定字段是否为指定值
create table stud (
stid number,
ssex char(1)
);
insert into stud values(1,‘M’);
insert into stud values(2,‘F’);
insert into stud values(3,‘F’);
insert into stud values(4,‘F’);
insert into stud values(5,‘M’);
insert into stud values(6,‘O’);
insert into stud values(7,NULL);
– 要求学生性别必须显示为中心
M- 男 F-女 O-其他 NULL代表无
select stid, (case ssex when ‘M’ then ‘男’
when ‘F’ then ‘女’
when ‘O’ then ‘其他’
else ‘无’ end) ssex
from stud;
使用decode 改写
select stid,
decode(ssex,‘M’,‘男’,‘F’,‘女’,‘O’,‘其他’,‘无’) ssex
from stud;
decode
substr – 对字符串进行截取
translate
replace
日期函数
类型转换函数
其他函数