---------------------------------------------日期/时间函数-----------------------------------------------
--1: SYSDATE
用来得到系统的当前日期
SELECT SYSDATE FROM DUAL;
--2: ADD_MONTHS
增加或减去月份
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20080818','YYYYMMDD'),2), 'YYYY-MM-DD') FROM DUAL;
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL
--3: LAST_DAY
返回日期的最后一天
SELECT LAST_DAY(SYSDATE) FROM DUAL;
SELECT LAST_DAY(ADD_MONTHS(SYSDATE, -2)) FROM DUAL;
--4: MONTHS_BETWEEN(date2,date1)
给出date2-date1的月份
--参数的格式需要注意
SELECT MONTHS_BETWEEN(TO_DATE('2011-05-03', 'YYYY-MM-DD'), TO_DATE('2011-01-23', 'YYYY-MM-DD')) FROM DUAL;
SELECT MONTHS_BETWEEN('19-12月-1999','19-3月-1999') mon_between FROM DUAL;
--SELECT MONTHS_BETWEEN('2011-1月-23', '2011-9月-1') FROM DUAL; 文字与格式字符串不匹配
--5: NEW_TIME(date,'this','that')
给出在this时区=other时区的日期和时间
SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD HH24:MI:SS') BeiJing_Time,
TO_CHAR(NEW_TIME(SYSDATE, 'PDT', 'GMT'), 'YYYY.MM.DD HH24:MI:SS') LOS_ANGELS FROM DUAL;
简写 时区
AST OR ADT 大西洋标准时间
HST OR HDT 阿拉斯加—夏威夷时间
BST OR BDT 英国夏令时
MST OR MDT 美国山区时间
CST OR CDT 美国*时区
NST 新大陆标准时间
EST OR EDT 美国东部时间
PST OR PDT 太平洋标准时间
GMT 格伦威治标准时间
YST OR YDT Yukon标准时间
--6: NEXT_DAY
返回与制定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期。
--星期日 = 1 星期一 = 2 星期二 = 3 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7
SELECT NEXT_DAY(SYSDATE, 2) FROM DUAL;
--7: CURRENT_DATE
当前会话时区中的当前日期
SELECT CURRENT_DATE FROM DUAL;
--8: CURRENT_TIMESTAMP
以timestamp with time zone数据类型返回当前会话时区中的当前日期
SELECT CURRENT_TIMESTAMP FROM DUAL;
--9: DBTIMEZONE()
返回时区
SELECT DBTIMEZONE FROM DUAL;
--10: SESSIONTIMEZONE
返回回话时区 其中DBTIMEZONE是数据库的,session是针对当前会话的,因为时区在会话级可以改变
SELECT SESSIONTIMEZONE FROM DUAL;
ALTER SESSION SET TIME_ZONE = '8:00';
SELECT SESSIONTIMEZONE FROM DUAL;
--11:EXTRACT
找出日期或间隔值的字段值
SELECT EXTRACT(MONTH FROM SYSDATE) "MONTH" FROM DUAL;
SELECT EXTRACT(DAY FROM SYSDATE) AS "DAY" FROM DUAL;
SELECT EXTRACT(YEAR FROM SYSDATE) AS "YEAR" FROM DUAL;
--12:LOCALTIMESTAMP
返回会话中的日期和时间
SELECT LOCALTIMESTAMP FROM DUAL;
--13: TRUNC(for dates) TRUNC函数为指定元素而截去的日期值。 其具体的语法格式如下: TRUNC(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去 下面是该函数的使用情况: TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mon-yyyy hh:mi am') ='24-Nov-1999 12:00:00 am' TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am'),'hh') ='24-Nov-1999 08:00:00 am' SELECT TRUNC(SYSDATE,'YYYY') FROM DUAL; --返回当年第一天. SELECT TRUNC(SYSDATE,'MM') FROM DUAL; --返回当月第一天. SELECT TRUNC(SYSDATE,'D') FROM DUAL; --返回当前星期的第一天. SELECT TRUNC(SYSDATE,'DD') FROM DUAL;--返回当前年月日
---- 上月最后一天
SELECT TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'YYYY/MM/DD') FROM DUAL;
----: 上各月的今天
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL;
---- 上个月第一天
SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE)+1,-2),'YYYY-MM-DD') FirstDay FROM DUAL;
--- 按照每周进行统计
SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;
--- 按照每月进行统计
SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL;
---- 按照每季度进行统计
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;
--- 按照每年进行统计
SELECT TO_CHAR(SYSDATE, 'YYYY') FROM DUAL;
--- 要找到某月中所有周五的具体日期
SELECT TO_CHAR(T.D, 'YY-MM-DD')
FROM
(
SELECT TRUNC(SYSDATE, 'MM') + ROWNUM -1 AS D
FROM DBA_OBJECTS
WHERE ROWNUM < 32
) T
WHERE TO_CHAR(T.D, 'MM') = TO_CHAR(SYSDATE, 'MM')
AND TRIM(TO_CHAR(T.D, 'DAY')) = '星期五'
下面的内容应该属于格式化函数,但是为了对日期函数做详细叙述,就把TO_CHAR的内容放到这里了
Y或YY或YYY 年的最后一位,两位或三位
SELECT TO_CHAR(SYSDATE, 'YYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL;
SYEAR或YEAR SYEAR使公元前的年份前加一负号
SELECT TO_CHAR(SYSDATE, 'SYEAR') FROM DUAL; --TWENTY ELEVEN
Q 季度,1~3月为第一季度
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; -- 2表示第二季度
MM 月份数
SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL; --04表示4月
RM 月份的罗马表示
SELECT TO_CHAR(SYSDATE, 'RM') FROM DUAL; --IV表示4月
Month 用9个字符长度表示的月份名
SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL; -- 4月
WW 当年第几周
SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL; -- 24表示2002年6月13日为第24周
W 本月第几周
SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL; -- 2011年04月26日为第4周
DDD 当年第几天. 1月1日为001,2月1日为032
SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;
DD 当月第几天
SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;
D 周内第几天
SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;
DY 周内第几天缩写
SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;
HH或HH12 12进制小时数
SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;
HH24 24小时制
SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;
MI 分钟数(0~59)
SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;
提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。
SS 秒数(0~59)
SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;
--------------------------------------------------------------------------------------