a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 493|回复: 2

[考试辅导] Oracle日期函数集锦

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
 一、 常用日期数据格式
% m* c5 y0 m& e! W2 _! G  1.Y或YY或YYY 年的最后一位,两位或三位
4 g( I7 X  i& \! ?. R+ N0 I  SQL> Select to_char(sysdate,'Y') from dual;- G- f% w3 V; P
  TO_CHAR(SYSDATE,'Y')
; I5 d; y5 N- U* @; C4 p3 p  7
& ]" _) K8 C( j( T$ [/ m  SQL> Select to_char(sysdate,'YY') from dual;
4 O# W+ g( X/ |  TO_CHAR(SYSDATE,'YY')
: L+ p% E6 \' v% r$ k) s- T  07
; g4 F& [6 Q2 S$ s  SQL> Select to_char(sysdate,'YYY') from dual;- U3 @+ T; ~8 z  [( a8 x# u
  TO_CHAR(SYSDATE,'YYY')" Z- o8 Q$ |- k1 L! `% m2 I
  0075 @* {2 b0 @8 H. ?) L
  2.Q 季度 1~3月为第一季度,2表示第二季度。3 ?! _9 \4 N  E( R3 X
  SQL> Select to_char(sysdate,'Q') from dual;
9 _# E; |( A/ I  w  c8 G# D  TO_CHAR(SYSDATE,'Q')4 w# u% A- j! H
  2
% M' w/ H# p$ z6 k  3.MM 月份数. e3 J- m) S2 H7 l% G+ G
  SQL> Select to_char(sysdate,'MM') from dual;( b# l. c. t6 s" E- L& ?% J* m
  TO_CHAR(SYSDATE,'MM')
; B0 G8 V: C. q  05, k( Q) Q- M/ |8 s
  4.RM 月份的罗马表示 (V在罗马数字中表示 5); n5 w0 H8 r7 k4 ~6 }% S0 B* n" a/ C# _$ e
  SQL> Select to_char(sysdate,'RM') from dual;
2 l: S- Q) {# B  TO_CHAR(SYSDATE,'RM')$ D+ L+ @4 F/ m3 F5 g" e
  V# ^& g3 p. Z4 P+ L0 p/ f5 t) q
  5.Month 用9个字符长度表示的月份名9 e5 z  W1 ^4 U( Y& W* Y0 L
  SQL> Select to_char(sysdate,'Month') from dual;
" u( p1 R) L8 Y- a  TO_CHAR(SYSDATE,'MONTH')8 _. g) `# Q7 W" }
  5月) e3 H6 Z. p. n. H( A* Z
  6.WW 当年第几周(2007年5月29日为2007年第22周)
$ I( a  p! e8 |6 e2 ^  SQL> Select to_char(sysdate,'WW') from dual;
( ?/ D8 r6 \& t. L! x7 n* M$ X& e  TO_CHAR(SYSDATE,'WW')2 X& y: }3 ^9 p- ^! a0 b
  227 t- X+ b% s: G! Y' d% F
  7.W 本月第几周 (2007年5月29日为5月第5周)) E: `, B# `) f
  SQL> Select to_char(sysdate,'W') from dual;: T+ ]& f( m" o( g. `  K
  TO_CHAR(SYSDATE,'W')
5 d% R! \5 g0 h% ^% F. O  53 q9 H* Y. V5 |) c% ]+ I1 @; ^3 \! i
  8.DDD 当年第几天(2007年5月29日为2007年第149天)7 }* ?. i$ [" k( A2 a' w  M
  SQL> Select to_char(sysdate,'DDD') from dual;
8 S: Z8 m# L/ v4 g$ S  TO_CHAR(SYSDATE,'DDD')
- D0 H" v3 Z- E, }! y: {5 e0 n  149
4 r/ L9 B8 f3 L3 n0 \  9. DD 当月第几天0 P; n6 q- z8 l8 o, |
  SQL> Select to_char(sysdate,'DD') from dual;
) A+ p9 s9 }. C% g! i) x$ v7 C5 A2 f& Y  TO_CHAR(SYSDATE,'DD')* Q9 l2 b) ^+ X8 w& s. U
  29
6 j4 A) B% o/ h8 y. i  10.D 周内第几天1 V( J) p& Q$ d+ |% U# z
  SQL> Select to_char(sysdate,'D') from dual;
1 K! ^3 b6 B; n. Z  TO_CHAR(SYSDATE,'D')- b) f" ~% P7 s+ I  O. V
  3
. V) c  _- x1 i6 P- A8 }8 W  11.DY 中文的星期几 ((2007年5月29日为星期二))
" |, U& B0 N0 v/ r  SQL> Select to_char(sysdate,'DY') from dual;( m/ `& l) G$ e0 f
  TO_CHAR(SYSDATE,'DY')
- ]" ]. c- w) e( o) Y/ p* o& Y  星期二
! F6 @6 \7 j5 w: w# x, t  12.HH或HH12 12进制小时数(16:09分为用12小时制计时为4点)6 x5 {; r& X; d# H
  SQL> Select to_char(sysdate,'HH') from dual;
6 H* ?$ o5 y- ?  TO_CHAR(SYSDATE,'HH')
& s1 s0 c6 W3 ?) j3 I, V& C5 c  04
% K. k6 C# B# O4 _& o  13.HH24 24小时制
1 h/ s1 w% c1 o! s4 Z4 r  SQL> Select to_char(sysdate,'HH24') from dual;1 [6 w1 s6 i) K$ d+ E
  TO_CHAR(SYSDATE,'HH24')/ m# w% b- M& D3 ?
  16
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle日期函数集锦

二、常用时间函数7 F% R" v/ K) C# X8 S1 R7 q
  1.trunc(sysdate,'Q') 本季度第一天: g( f$ B0 `, G* e& l- x* F% J* L
  SQL> select trunc(sysdate,'Q') from dual;
* A# j- T+ X+ b- O( K, F+ T1 X/ \  TRUNC(SYSDATE,'Q')
4 b0 w$ Q4 l/ j7 C1 E5 w% m  200741
* Y" g0 A! \; W1 X) V* k/ {9 t  2.trunc(sysdate,'D') 本周的第一天(周日)
1 Y7 d5 J) z4 y3 n# B+ A$ ^  SQL> select trunc(sysdate,'D')from dual;
5 C8 t* F' f5 }% u% `0 o  TRUNC(SYSDATE,'D')$ h! @1 Q& j( c6 @
  2007527
# L$ l1 N3 y1 f9 F7 D5 B  3.last_day(sysdate) 本月最后一天
6 x, ~, p( e  F! m$ ?  SQL> select last_day(sysdate) from dual;
, g* w; |+ a9 W8 T+ C  LAST_DAY(SYSDATE)
6 c, l1 C2 O  U2 k. Q  2007531 15:20:3
  g" l, u" I8 b6 A  4.add_months(sysdate,2) 日期sysdate后推2个月+ c' u% {) u9 B" Y' k$ S$ N
  SQL> select add_months(sysdate,2) from dual;: @8 H, h8 l2 E% [1 \+ i; M1 @, N2 n1 H
  ADD_MONTHS(SYSDATE,2)
! f* q! m$ i3 x2 k  2007729 15:21:14/ U# r4 R7 W+ J1 t! c4 J
  5.next_day(sysdate,2) 日期sysdate之后的第一周中,第2(指定星期的第几天)是什么日期
$ x2 h( P5 I$ e9 ~9 X8 Q  SQL> select next_day(sysdate,2) from dual;0 u0 A! w, c: L: C, U! w3 ?* ~7 w
  NEXT_DAY(SYSDATE,2)- P( d. k  W' R; m9 k$ b
  200764 15:22:10+ [. K( F2 e# r$ X0 g
  6.Months_between(f,s) 日期f和s间相差月数6 M0 ]  W$ ^. Y/ z" x& C5 i- T
  SQL> select months_between(sysdate,to_date('20070412','yyyymmdd'))from dual;
4 V( c' L: Y1 A0 }/ n' j+ n2 T  MONTHS_BETWEEN(SYSDATE,TO_DATE
% `8 o9 W* U( d7 b  p1 `  1.56909908900836, M) {- t# `  l3 C0 o. d) I
  7.得到SYSDATE+5所在的月份
! V5 [& D9 v2 ~  P  SQL> SELECT to_char(SYSDATE+5,'mon','nls_date_languageamerican') FROM dual;9 t1 E* `4 H8 Y4 K
  TO_CHAR(SYSDATE+5,'MON','NLS_D3 p5 g- \$ N. k$ ]
  jun
, o+ H- e' O3 X) e# \" f  8.current_date()返回当前会话时区中的当前日期。/ J; ^0 ~" o7 }6 H
  9.select dbtimezone from dual;
" A" d3 b+ H  x  10.extract()找出日期或间隔值的字段值
5 Z% {7 C3 L. q  w1 P9 \  SQL> select extract(month from sysdate) "This Month" from dual;
9 t2 i' Y2 X6 }' I6 T: j  This Month
0 Q+ C) H* P. N, ]/ C$ s  5, j  D6 o0 v9 i. F# H' n2 e
  SQL> select extract(year from sysdate) "This year" from dual;
( I- p: d1 n1 B1 A) H6 x& q+ L  This year+ ?- ~9 w' h3 r5 G8 J
  2007
0 S* D) c( a+ x7 y0 [; U) _/ K  SQL> select extract(month from add_months(sysdate,2)) " Month" from dual;7 k* k4 O" ]& S
  Month
( C; x  [7 e2 A3 }7 t7 a  7
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:21 | 显示全部楼层

Oracle日期函数集锦

三、一些实践后的用法:
2 U+ e6 g3 U% }  1.上月末天:4 e. p6 ~% ?! P' n
  select to_char(add_months(last_day(sysdate),1),'yyyyMMdd') LastDay from dual;
+ Z1 s( d  Q: c6 ~0 Q7 N  2.上月今天7 V2 U: n+ T; e! j2 a/ j" [% p; `
  SQL> select to_char(add_months(sysdate,1),'yyyyMMdd') PreToday from dual;; ~7 D  U1 y5 l. \0 ]/ X9 s
  3.上月首天% l2 x( \" A* P# B
  SQL> select to_char(add_months(last_day(sysdate)+1,2),'yyyyMMdd') firstDay from dual;
5 x8 m1 G% z$ Q. h0 [# E  4.要找到某月中所有周五的具体日期$ Q3 }0 f. i# A. \% M
  SELECT to_char(b.a,'YYMMDD'), J  k. j$ p; q, a: n6 b& e$ E
  FROM ( SELECT trunc(SYSDATE,'mm')+ROWNUM1 a
3 p6 i/ a4 R% r5 u2 R& y  y  FROM dba_objects where rownum < 32 ) b
. F! v( D/ y( C6 M1 v  WHERE to_char(b.a,'day')'星期五';
! ^! X2 D3 a& D$ L3 @# I1 k  如果把where to_char(t.d, 'MM') to_char(sysdate, 'MM')改成sysdate90,即为查找当前月份的前三个月中5 V* i: q5 F: p! p
  的每周五的日期。) \* I/ t: A: x! n# R! y
  5.得到系统当前月及以后的日期6 j8 M8 ^: w4 C% L
  select trunc(sysdate, 'MM')+ROWNUM1 FROM dba_objects ;' F2 S0 b/ c! r% j: P" v
  to_date 字符串类型转为换日期类型- X# i. `( e/ W) }( o  n" e9 ]) B
  字符串中的相应位置上的字符,必须符合时间范围的限制
2 w; U4 v3 Q- K1 y/ j. z2 m  14.MI 分钟数(0~59)  W( l1 ~+ x2 [, d5 F
  提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。
) u  V0 r9 H$ ^7 `6 Y; |  S; e6 A  15.SS 秒数(0~59)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-20 17:44 , Processed in 0.262179 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表