--获取系统时间
select sysdate from dual;
---获取当前时区时间
select current_date from dual;
--基本的日期格式符号(抄录自http://www.douban.com/note/28690368/ 感谢原文作者分享的事例代码)
--Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年
--SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年
--Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度①
--MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月
--RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月
--Month 用9个字符长度表示的月份名 Select to_char(sysdate,’Month’) from dual; May后跟6个空格表示5月
--WW 当年第几周 Select to_char(sysdate,’WW’) from dual; 24表示2002年6月13日为第24周
--W 本月第几周 Select to_char(sysdate,’W’) from dual; 2002年10月1日为第1周
--DDD 当年第几, 1月1日为001,2月1日为032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2月2 9日为第363天
---DD 当月第几天 Select to_char(sysdate,’DD’) from dual; 04 10月4日为第4天
--D 周内第几天 Select to_char(sysdate,’D’) from dual; 5 2002年3月14日为星期一
--DY 周内第几天缩写 Select to_char(sysdate,’DY’) from dual; SUN 2002年3月24日为星期天
--HH或HH12 12进制小时数 Select to_char(sysdate,’HH’) from dual; 02 午夜2点过8分为02
--HH24 24小时制 Select to_char(sysdate,’HH24’) from dual; 14 下午2点08分为14
--MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4点17分
--SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual; 22 11点3分22秒
----由以上的格式看下trunc对日期的处理,返回的都是日期的形式
select trunc(sysdate),round(sysdate) from dual;
select 'now' ,sysdate from dual union all
select 'MI',trunc(sysdate,'MI') FROM DUAL UNION all
select 'HH',trunc(sysdate,'HH') FROM DUAL UNION all
select 'HH24',trunc(sysdate,'HH24') FROM DUAL UNION all
select 'D',trunc(sysdate,'D') FROM DUAL UNION all
select 'DD',trunc(sysdate,'DD') FROM DUAL UNION all
select 'DDD',trunc(sysdate,'DDD') FROM DUAL UNION all
select 'W',trunc(sysdate,'W') FROM DUAL UNION all
select 'IW',trunc(sysdate,'IW') FROM DUAL UNION all
select 'WW',trunc(sysdate,'WW') FROM DUAL UNION all
select 'MM',trunc(sysdate,'MM') FROM DUAL UNION all
select 'Q',trunc(sysdate,'Q') FROM DUAL UNION all
select 'YYYY',trunc(sysdate,'YYYY') FROM DUAL
---如果要返回的是数值的格
select to_char(sysdate,'WW') FROM DUAL
---本月最后一天
select last_day(sysdate) from dual
---月份相加
select add_months(sysdate,1) from dual
--转
无论是DATE还是timestamp都可以进行加减操作。
可以对当前日期加年、月、日、时、分、秒,操作不同的时间类型,有三种方法:
1 使用内置函数numtodsinterval增加小时,分钟和秒
2 加一个简单的数来增加天
3 使用内置函数add_months来增加年和月
例:
对当前日期增加一个小时:
SQL> select sysdate, sysdate+numtodsinterval(1,’hour’) from dual ;
SYSDATE SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:38:19 2010-10-14 22:38:19
对当前日期增加50分种
SQL> select sysdate, sysdate+numtodsinterval(50,’minute’) from dual ;
SYSDATE SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:39:12 2010-10-14 22:29:12
对当前日期增加45秒
SQL> select sysdate, sysdate+numtodsinterval(45,’second’) from dual ;
SYSDATE SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:40:06 2010-10-14 21:40:51
对当前日期增加3天
SQL> select sysdate, sysdate+3 from dual ;
SYSDATE SYSDATE+3
——————- ——————-
2010-10-14 21:40:46 2010-10-17 21:40:46
对当前日期增加4个月
SQL> select sysdate, add_months(sysdate,4) from dual ;
SYSDATE ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:41:43 2011-02-14 21:41:43
当前日期增加2年
SQL> select sysdate, add_months(sysdate,12*2) from dual ;
SYSDATE ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:42:17 2012-10-14 21:42:17
timestamp的操作方法与上面类似;
求两个日期之差:
例:求2007-5-23 21:23:34与当前时间之间的差值。
SQL> select sysdate-to_date(’20070523 21:23:34′,’yyyy-mm-dd hh24:mi:ss’) dt from
dual ;
DT
———-
1240.01623
如果两个日期直接相减,得到的结果是一个数据型,我们可能想要得到两个日期相差值表现形式为:
**年**月**日 **:**:**
SQL> SELECT NUMTOYMINTERVAL(MONTHS_BETWEEN(DT1, DT2), ‘month’) mon,
2 numtodsinterval(dt1-(add_months(dt2,trunc(MONTHS_BETWEEN(DT1, DT2)))
),’day’) DAY
3 FROM (SELECT SYSDATE DT1,
4 TO_DATE(’20070523 21:23:34′, ‘yyyy-mm-dd hh24:mi:ss’) DT2
5 FROM DUAL)
6 ;
MON DAY
—————- ———————-
+000000003-04 +000000021 00:40:15.999999999
即:3年 4 个月 21 天 00:40:15.99999999