Oracle日期时间用法.docx
《Oracle日期时间用法.docx》由会员分享,可在线阅读,更多相关《Oracle日期时间用法.docx(13页珍藏版)》请在冰豆网上搜索。
Oracle日期时间用法
Oracle日期时间用法.txt永远像孩子一样好奇,像年轻人一样改变,像中年人一样耐心,像老年人一样睿智。
我的腰闪了,惹祸的不是青春,而是压力。
。
。
。
。
。
当女人不再痴缠,不再耍赖,不再喜怒无常,也就不再爱了。
PURGERECYCLEBIN
转一篇oracle日期时间用法的文章,十分有用!
--------------------------------------------------------------
相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。
那在oracle中应该怎么来写sql语句呢,这个时候Oracle的日期函数会给我们很多帮助。
常用日期型函数
1。
Sysdate当前日期和时间
SQL>Selectsysdatefromdual;
SYSDATE
----------
21-6月-05
2。
Last_day本月最后一天
SQL>Selectlast_day(sysdate)fromdual;
LAST_DAY(S
----------
30-6月-05
3。
Add_months(d,n)当前日期d后推n个月
用于从一个日期值增加或减少一些月份
date_value:
=add_months(date_value,number_of_months)
SQL>Selectadd_months(sysdate,2)fromdual;
ADD_MONTHS
----------
21-8月-05
4。
Months_between(f,s)日期f和s间相差月数
SQL>selectmonths_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))fromdual;
MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-DD'))
----------------------------------------------------------
-4.6966741
5。
NEXT_DAY(d,day_of_week)
返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。
参数"day_of_week"必须为该星期中的某一天。
SQL>SELECTnext_day(to_date('20050620','YYYYMMDD'),1)FROMdual;
NEXT_DAY(T
----------
26-6月-05
6。
current_date()返回当前会话时区中的当前日期
date_value:
=current_date
SQL>columnsessiontimezonefora15
SQL>selectsessiontimezone,current_datefromdual;
SESSIONTIMEZONECURRENT_DA
-------------------------
+08:
0013-11月-03
SQL>altersessionsettime_zone='-11:
00'2/
会话已更改。
SQL>selectsessiontimezone,current_timestampfromdual;
SESSIONTIMEZONECURRENT_TIMESTAMP
---------------------------------------------------
-11:
0012-11月-0304.59.13.668000下午-11:
00
7。
current_timestamp()以timestampwithtimezone数据类型返回当前会话时区中的当前日期
SQL>selectcurrent_timestampfromdual;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
21-6月-0510.13.08.220589上午+08:
00
8。
dbtimezone()返回时区
SQL>selectdbtimezonefromdual;
DBTIME
------
-08:
00
9。
extract()找出日期或间隔值的字段值
date_value:
=extract(date_fieldfrom[datetime_value|interval_value])
SQL>selectextract(monthfromsysdate)"ThisMonth"fromdual;
ThisMonth
----------
6
SQL>selectextract(yearfromadd_months(sysdate,36))"Years"fromdual;
Years
----------
2008
10。
localtimestamp()返回会话中的日期和时间
SQL>selectlocaltimestampfromdual;
LOCALTIMESTAMP
---------------------------------------------------------------------------
21-6月-0510.18.15.855652上午
常用日期数据格式(该段为摘抄)
Y或YY或YYY年的最后一位,两位或三位Selectto_char(sysdate,’YYY’)fromdual;002表示2002年
SYEAR或YEARSYEAR使公元前的年份前加一负号Selectto_char(sysdate,’SYEAR’)fromdual;-1112表示公元前1112年
Q季度,1~3月为第一季度Selectto_char(sysdate,’Q’)fromdual;2表示第二季度①
MM月份数Selectto_char(sysdate,’MM’)fromdual;12表示12月
RM月份的罗马表示Selectto_char(sysdate,’RM’)fromdual;IV表示4月
Month用9个字符长度表示的月份名Selectto_char(sysdate,’Month’)fromdual;May后跟6个空格表示5月
WW当年第几周Selectto_char(sysdate,’WW’)fromdual;24表示2002年6月13日为第24周
W本月第几周Selectto_char(sysdate,’W’)fromdual;2002年10月1日为第1周
DDD当年第几,1月1日为001,2月1日为032Selectto_char(sysdate,’DDD’)fromdual;3632002年12月29日为第363天
DD当月第几天Selectto_char(sysdate,’DD’)fromdual;0410月4日为第4天
D周内第几天Selectto_char(sysdate,’D’)fromdual;52002年3月14日为星期一
DY周内第几天缩写Selectto_char(sysdate,’DY’)fromdual;SUN2002年3月24日为星期天
HH或HH1212进制小时数Selectto_char(sysdate,’HH’)fromdual;02午夜2点过8分为02
HH2424小时制Selectto_char(sysdate,’HH24’)fromdual;14下午2点08分为14
MI分钟数(0~59)Selectto_char(sysdate,’MI’)fromdual;17下午4点17分
SS秒数(0~59)Selectto_char(sysdate,’SS’)fromdual;2211点3分22秒
提示注意不要将MM格式用于分钟(分钟应该使用MI)。
MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。
现在给出一些实践后的用法:
1。
上月末天:
SQL>selectto_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd')LastDayfrom
dual;
LASTDAY
----------
2005-05-31
2。
上月今天
SQL>selectto_char(add_months(sysdate,-1),'yyyy-MM-dd')PreTodayfromdual;
PRETODAY
----------
2005-05-21
3.上月首天
SQL>selectto_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd')firstDayfromdual;
FIRSTDAY
----------
2005-05-01
4.按照每周进行统计
SQL>selectto_char(sysdate,'ww')fromdualgroupbyto_char(sysdate,'ww');
TO
--
25
5。
按照每月进行统计
SQL>selectto_char(sysdate,'mm')fromdualgroupbyto_char(sysdate,'mm');
TO
--
06
6。
按照每季度进行统计
SQL>selectto_char(sysdate,'q')fromdualgroupbyto_char(sysdate,'q');
T
-
2
7。
按照每年进行统计
SQL>selectto_char(sysdate,'yyyy')fromdualgroupbyto_char(sysdate,'yyyy');
TO_C
----
2005
8.要找到某月中所有周五的具体日期
selectto_char(t.d,'YY-MM-DD')from(
selecttrunc(sysdate,'MM')+rownum-1asd
fromdba_objects
whererownum<32)t
whereto_char(t.d,'MM')=to_char(sysdate,'MM')--找出当前月份的周五的日期
andtrim(to_char(t.d,'Day'))='星期五'
--------
03-05-02
03-05-09
03-05-16
03-05-23
03-05-30
如果把whereto_char(t.d,'MM')=to_char(sysdate,'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。
9.oracle中时间运算
内容如下:
1、oracle支持对日期进行运算
2、日期运算时是以天为单位进行的
3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可
4、进行时间进制转换时注意加括号,否则会