日期运算函数 ADD_MONTHS(d,n) --时间点d再加上n个月 ex. select sysdate, add_months(sysdate,2) aa from dual; SYSDATE AA ---------- ---------- 21-SEP-07 21-NOV-07 LAST_DAY(d) --时间点d当月份最后一天 ex. select sysdate, LAST_DAY(sysdate) LAST_DAY from dual; SYSDATE LAST_DAY ---------- --------- 21-SEP-07 30-SEP-07 NEXT_DAY(d,number) --◎ 时间点d开始,下一个星期几的日期 --◎ 星期日 = 1 星期一 = 2 星期二 = 3 -- 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7 ex. select sysdate, NEXT_DAY(sysdate,2) aa from dual; SYSDATE AA ---------- ---------- 21-SEP-07 24-SEP-07 MONTHS_BETWEEN(d1,d2) --计算d1与d2相隔的月数 ex. select trunc(MONTHS_BETWEEN(to_date('20071101','yyyymmdd'), to_date('20070820','yyyymmdd'))) aa from dual; AA ---------- 2 NEW_TIME(d,c1,c2) --转换新时区 ex. select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') 台北, to_char(NEW_TIME(sysdate,'EST','GMT'),'YYYY/MM/DD HH24:MI:SS') 格林威治 from dual; 台北 格林威治 -------------------- ------------------- 2007/09/21 14:36:53 2007/09/21 19:36:53 ROUND(d[,fmt]) --◎ 对日期作四舍五入运算 --◎ 月的四舍五入以每月的15号为基准 --◎ 年的四舍五入以每年6月为基准 ex. select sysdate, ROUND(sysdate,'year') aa from dual; SYSDATE AA ---------- ---------- 21-SEP-07 01-JAN-08 select sysdate, ROUND(sysdate,'month') aa from dual; SYSDATE AA ---------- ---------- 21-SEP-07 01-OCT-07 TRUNC(d[,fmt]) --对日期作截取运算 ex. select sysdate, TRUNC(sysdate,'year') aa from dual; SYSDATE AA ---------- ---------- 21-SEP-07 01-JAN-07 select sysdate, TRUNC(sysdate,'month') aa from dual; SYSDATE AA ---------- ---------- 21-SEP-07 01-SEP-07
Oracle在日期使用上允许极大的灵活性。由于可以在日期字段存储时间和日期,从而有函数可以既引用日期又引用时间。 Oracle 所提供的一些日期函数如下所示。 1. SYSDATE 返回当前的日期和时间。 示例 SELECT sysdate FROM dual;
SYSDATE ---------- 05-3月 -03
2. ADD_MONTHS(d, no_of_month) 当前日期"m"后推"no_of_month" 个月。参数"no_of_month"可为任何整数。 示例 SELECT add_months(sysdate,2) FROM dual;
ADD_MONTHS ---------- 05-5月 -03
SELECT add_months(sysdate,-2) FROM dual;
ADD_MONTHS ---------- 05-1月 -03
3. LAST_DAY(month_day) 返回变量"month_day"中所指定月份的最后一天的日期。 示例 SELECT last_day(sysdate) FROM dual;
LAST_DAY(S ---------- 31-3月 -03
4. MONTHS_BETWEEN(d1, d2) 返回日期 d1 和 d2 之间的月份数。如果 d1 晚于 d2,结果为正,否则返回负数。 示例 SELECT months_between(sysdate,to_date('20030101','YYYYMMDD')) FROM dual;
MONTHS_BETWEEN(SYSDATE,TO_DATE('20030101','YYYYMMDD')) ------------------------------------------------------ 2.15773932
5. NEXT_DAY(d, day_of_week) 返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"day_of_week"必须为该星期中的某一天。 示例 -- 2003.3.2 是星期日 SELECT next_day(to_date('20030226','YYYYMMDD'),1) FROM dual;
NEXT_DAY(T ---------- 02-3月 -03
4。今年一月一日
select last_day(add_months(sysdate,-to_char(sysdate,'mm')))+1 from dual;
最简单的是
select trunc(sysdate,'y') from dual;
|