码迷,mamicode.com
首页 > 数据库 > 详细

SQL语句——04、日期类型函数

时间:2019-10-20 18:19:28      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:会话   strong   直接   相减   erro   处理   参与   --   个数   

如果你对当前系统的日期格式看这不舒服,可以修改当前会话的显示格式

idle> alter session set NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS;

Session altered.

idle> select sysdate from dual;

SYSDATE
-------------------
2010-12-17 08:52:31
这是OS系统时间,数据库本身没时间 只有SCN号

日期可以直接参与运算

idle> select sysdate-10 from dual;

SYSDATE-10
-------------------
2010-12-07 08:53:16

两个日期型数据相减会得到相差的天数

idle> select to_date(2010-12-30)-sysdate from dual;

TO_DATE(2010-12-30)-SYSDATE
-----------------------------
     12.6290856

idle>

可以将日期型的数据和一个小时数相加减 这个数要除以24

idle> select sysdate from dual;

SYSDATE
-------------------
2010-12-17 08:55:56

idle> select sysdate + 5/24 from dual;

SYSDATE+5/24
-------------------
2010-12-17 13:55:56

idle>

MONTHS_BEWTEEN(日期1,日期2)

如果日期1大于日期2返回正数,日期1小于日期2返回负数
idle> select months_between(2010-10-10,2010-12-10) from dual;

MONTHS_BETWEEN(2010-10-10,2010-12-10)
-----------------------------------------
           -2

idle> select months_between(2010-12-10,2010-10-10) from dual;

MONTHS_BETWEEN(2010-12-10,2010-10-10)
-----------------------------------------
     2

idle>

ADD_MONTHS(日期,n)

把n个月加到日期上
idle> select add_months(2010-10-10,3) from dual;

ADD_MONTHS(2010-10
-------------------
2011-01-10 00:00:00

NEXT_DAY(日期,星期)

下一个星期几的日期? 如果是中文系统将MONDAY改成"星期一"
idle> select next_day(sysdate,MONDAY) from dual;

NEXT_DAY(SYSDATE,M
-------------------
2010-12-20 09:02:06

idle>
idle> select next_day(sysdate,fri) from dual;

NEXT_DAY(SYSDATE,F
-------------------
2010-12-24 09:02:44

idle>

LAST_DAY(日期)

返回该日期的所在月的最后一天
idle> select last_day(sysdate) from dual;

LAST_DAY(SYSDATE)
-------------------
2010-12-31 09:03:26

idle>

idle> alter session set nls_date_format=YYYY-MM-DD;

Session altered.
idle> select ename,hiredate,last_day(hiredate),next_day(hiredate,SUN),months_between(sysdate,hiredate) "MON",ADD_MONTHS(hiredate,3) from emp
where ename=SCOTT;

ENAME   HIREDATE   LAST_DAY(H NEXT_DAY(H   MON ADD_MONTHS
---------- ---------- ---------- ---------- ---------- ----------
SCOTT   1987-04-19 1987-04-30 1987-04-26 283.947709 1987-07-19

idle>

ROUND(date,‘[day|month|year]‘) 和 trunc(date,‘[day|month|year]‘)

应用于日期型数据,数字的进位和截取是以小数点为中心,而日期的进位和截取是以年月日时分秒为中心
idle> select round(2010-10-10,MONTH) from dual;
select round(2010-10-10,MONTH) from dual
             *
ERROR at line 1:
ORA-01722: invalid number
因为round不能处理字符型数据,所以报错,我们要将字符型数据转换为日期型

idle> select round(to_date(2010-10-10),MONTH) from dual;

ROUND(TO_DATE(
-------------------
2010-10-01 00:00:00


这是按月为单位进行四舍五入 因为10号是16号以前 所以得到10.1日
月为单位的四舍五入的分割线
idle>  select round(to_date(2010-10-15),MONTH),trunc(to_date(2010-10-15)) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2010-10-01 00:00:00 2010-10-15 00:00:00

idle>  select round(to_date(2010-10-16),MONTH),trunc(to_date(2010-10-16)) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2010-11-01 00:00:00 2010-10-16 00:00:00

idle>

年为单位的四舍五入分割线
idle> select round(to_date(2010-06-30),year),trunc(to_date(2010-06-30),year) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2010-01-01 00:00:00 2010-01-01 00:00:00

idle>  select round(to_date(2010-07-01),year),trunc(to_date(2010-07-01),year) from dual;

ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010
------------------- -------------------
2011-01-01 00:00:00 2010-01-01 00:00:00

idle>

RR与 YY的区别

SQL> select to_date(18-may-91,DD-MON-RR) FROM DUAL;

TO_DATE(18-MAY-91
-------------------
1991-05-18 00:00:00

SQL> select to_date(18-may-91,DD-MON-YY) FROM DUAL;

TO_DATE(18-MAY-91
-------------------
2091-05-18 00:00:00

SQL> 

SQL语句——04、日期类型函数

标签:会话   strong   直接   相减   erro   处理   参与   --   个数   

原文地址:https://www.cnblogs.com/marxist/p/11708150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!