数据库Oracle日期函数

SYSDATE 函数:是一个日期函数,它返回当前数据库服务器的日期和时间。

用日期计算:

从日期加或者减一个数,结果是一个日期值

两个日期相减,得到两个日期之间的天数

用小时数除以 24,可以加小时到日期

 

SQL> select sysdate from dual;
SYSDATE
-----------
2019/7/30 1

SQL> select sysdate+1 from dual;
SYSDATE+1
-----------
2019/7/31 1

SQL> select sysdate+1/24 from dual;
SYSDATE+1/24
------------
2019/7/30 20

SQL> select sysdate-3 from dual;
SYSDATE-3
-----------
2019/7/27 1

 

用日期做算术运算:

例:显示所有在部门 90 中的雇员的名字和从业的周数。雇员的总工作时间以周计算。

SQL> select last_name,hire_date,trunc((sysdate-hire_date)/7) "周长:" from employees where department_id=90 order by hire_date,trunc((sysdate-hire_date)/7);
LAST_NAME                 HIRE_DATE          周长:
------------------------- ----------- ----------
De Haan                   2001/1/13          967
King                      2003/6/17          841
Kochhar                   2005/9/21          722

 

日期函数:

 

MONTHS_BETWEEN(date1,date2):计算 date1 date2 之间的月数。其结果可以是正的也可以是负的。如果 date1 大于 date2,结果是正的。反之,结果是负的。

date1日期类型

date2日期类型

SQL> select employee_id,last_name,hire_date,trunc(months_between(sysdate,hire_date)) from employees where department_id=90 order by employee_id;
EMPLOYEE_ID LAST_NAME                 HIRE_DATE   TRUNC(MONTHS_BETWEEN(SYSDATE,H
----------- ------------------------- ----------- ------------------------------
        100 King                      2003/6/17                              193
        101 Kochhar                   2005/9/21                              166
        102 De Haan                   2001/1/13                              222

 

ADD_MONTHS(date, n):添加 n 个日历月到 daten 的值必须是整数,但可以是负的。

date日期类型。

n整数

SQL> select add_months(sysdate,2) from dual;
ADD_MONTHS(SYSDATE,2)
---------------------
2019/9/30 20:06:46

SQL> select add_months(sysdate,-2) from dual;
ADD_MONTHS(SYSDATE,-2)
----------------------
2019/5/30 20:07:25

 

NEXT_DAY(date, ‘char’):计算在 date 之后的下一个周(‘char’)的指定天的日期。char 的值可能是一个表示一天的数或者是一个字符串。如果使用数字表示星期,1 是从星期日开始。

数字范围为:1-7

date日期类型

char数字或字符串

SQL> select next_day(sysdate,3) from dual;
NEXT_DAY(SYSDATE,3)
-------------------
2019/8/6 20:09:43

SQL> select next_day(sysdate,'星期五') from dual;
NEXT_DAY(SYSDATE,'星期五')
-----------------------
2019/8/2 20:10:02

 

LAST_DAY(date):计算包含 date 的月的最后一天的日期。

date日期类型

SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-----------------
2019/7/31 20:12:1

SQL> select last_day(add_months(sysdate,2)) from dual;
LAST_DAY(ADD_MONTHS(SYSDATE,2)
------------------------------
2019/9/30 20:14:16

 

ROUND(date,‘fmt’):返回用格式化模式 fmt 四舍五入到指定单位的 date ,如果格式模式 fmt 被忽略,date 被四舍五入到最近的天。fmt如果不写,则默认是day.

date日期类型

fmt字符串类型

SQL> select round(sysdate) from dual;
ROUND(SYSDATE)
--------------
2019/7/31

SQL> select round(sysdate,'yy') from dual;
ROUND(SYSDATE,'YY')
-------------------
2020/1/1

SQL> select round(sysdate,'mm') from dual;
ROUND(SYSDATE,'MM')
-------------------
2019/8/1

SQL> select round(sysdate,'dd') from dual;
ROUND(SYSDATE)
--------------
2019/7/31

 

TRUNC(date, ‘fmt’):返回用格式化模式 fmt 截断到指定单位的带天的。如果格式模式fmt 被忽略,date 被截断到最近的天。

date日期类型

fmt:字符串类型

trunc和round的用法一模一样,只不过trunc不会四舍五入,是多少,就是多少。

 

例 1:

查询所有受雇在 15 (180 个月) 以内的雇员的 employee_idhire_date,显示他们已被雇用的月,从受雇日期开始加 6 个月的试用期后的日期,受雇日期后的第一个星期五是几号,以及受雇月的最后一天是几号。

SQL> select employee_id,hire_date,trunc(months_between(sysdate,hire_date)),next_day(add_months(hire_date,6),'星期五'),last_day(add_months(hire_date,6)) from employees where trunc(months_between(sysdate,hire_date))<180; 
EMPLOYEE_ID HIRE_DATE   TRUNC(MONTHS_BETWEEN(SYSDATE,H NEXT_DAY(ADD_MONTHS(HIRE_DATE, LAST_DAY(ADD_MONTHS(HIRE_DATE,
----------- ----------- ------------------------------ ------------------------------ ------------------------------
        101 2005/9/21                              166 2006/3/24                      2006/3/31
        103 2006/1/3                               162 2006/7/7                       2006/7/31
        104 2007/5/21                              146 2007/11/23                     2007/11/30
        105 2005/6/25                              169 2005/12/30                     2005/12/31
        106 2006/2/5                               161 2006/8/11                      2006/8/31
        107 2007/2/7                               149 2007/8/10                      2007/8/31
        110 2005/9/28                              166 2006/3/31                      2006/3/31
        111 2005/9/30                              166 2006/4/7                       2006/3/31
        112 2006/3/7                               160 2006/9/8                       2006/9/30
        113 2007/12/7                              139 2008/6/13                      2008/6/30

 

例 2:

查询受雇日期,找出 2002 年开始工作的哪些人。用 ROUND TRUNC 函数显示开始的月份。

SQL> select round(hire_date,'month'),trunc(hire_date,'month') from employees where  substr(hire_date,-2)=02;
ROUND(HIRE_DATE,'MONTH') TRUNC(HIRE_DATE,'MONTH')
------------------------ ------------------------
2002/9/1                 2002/8/1
2002/9/1                 2002/8/1
2002/12/1                2002/12/1
2002/6/1                 2002/6/1
2002/6/1                 2002/6/1
2002/6/1                 2002/6/1
2002/6/1                 2002/6/1
7 rows selected

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值