oracle 基本日期操作

本文深入探讨了SQL中关于日期和时间的基本操作,包括获取系统时间、当前时区时间、日期格式化、日期时间的加减运算以及计算日期差等核心功能。通过实例代码,详细介绍了如何使用SQL进行复杂的日期时间处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

----基本的日期操作

--获取系统时间
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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值