a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 142|回复: 0

[考试辅导] Oracle性能调优:日期时间函数大全3

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
17.yyyy与rrrr的区别
! E9 t, y" y4 e* Y    'YYYY99 TO_C
5 X9 Z) Z: H3 \    ------- ----
, f" s+ t1 C" @5 f1 K    yyyy 99 0099
) _5 \7 r, H  l( M+ y- }6 h+ z0 d    rrrr 99 1999) [) P, d2 e9 I4 |
    yyyy 01 0001. S! M7 n& u6 K
    rrrr 01 2001
+ s8 G7 [+ ^9 O7 }  w    18.不同时区的处理7 M+ i' T/ \3 E* @& [
    select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
" r  D4 C" \$ z( M8 A& J( y    from dual;
; h# h3 X$ }1 c# d% ?  c/ A! V    19.5秒钟一个间隔7 ^  X( X! I! z
    Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')" S" E' y% ?  a. [4 |8 T  t- ^
    from dual+ `: b5 v- e! ~8 `
    2002-11-1 9:55:00 35786
6 k" Y+ K: h7 q3 q    SSSSS表示5位秒数1 ~  n: J9 I' u+ n0 U- t
    20.一年的第几天3 y" E9 Q8 I6 f+ C
    select TO_CHAR(SYSDATE,'DDD'),sysdate from dual2 b1 p0 F6 r1 @8 R7 U! }+ P* Y1 u
    310 2002-11-6 10:03:51
6 `+ _' C& U& I8 e6 ?    21.计算小时,分,秒,毫秒4 q2 Q7 V+ P2 I3 h0 _
    select
1 n9 o( o. L' ]9 F5 ]    Days,
+ O' O1 O5 H2 \/ g# d    A,
5 b  ^7 E5 a4 ^4 {  k+ F    TRUNC(A*24) Hours,, b( _, |1 N4 L) t2 E4 E
    TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
# v  V8 ]; q" k5 d0 L4 x( R    TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,8 G  d* {6 \+ }/ P0 }8 _
    TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds/ w5 w* t; I, F- W+ o% ~( V1 }
    from
1 A* s) ?' e/ G2 A8 K' W    (# D0 ?! H% t6 O* G7 w5 p
    select( _- J. c! ]9 s( D9 ?! F
    trunc(sysdate) Days,
" v- P% I6 H" k    sysdate - trunc(sysdate) A
( b9 `  f' N! B; Q    from dual1 m( {  @# r" W. r
    )) R  l) v2 k' Z4 K9 z
    select * from tabname# v: m9 f) _: Q- N* x
    order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');% o/ {2 U7 o: u9 }: I7 Q/ U
    //" @% t6 W& h  J1 n- a
    floor((date2-date1) /365) 作为年1 d6 j) Z, c* r4 W& @/ Q
    floor((date2-date1, 365) /30) 作为月
. s1 _  C2 [7 A1 X. n& e    d(mod(date2-date1, 365), 30)作为日。( E. {- r3 p3 z( V7 m" n
    23.next_day函数 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日
$ {9 Z* h! @- I    next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。9 ]0 [( F1 i2 h% p5 m
    1 2 3 4 5 6 7
) S* M  `& Z! q) N) I    日 一 二 三 四 五 六
" g/ f3 ?) J5 U1 @  @& X    ---------------------------------------------------------------
5 V; A- K$ O  l% }    select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual2 G3 M1 B( K+ t* \. Q, X9 y$ G
    日期 返回的是天 然后 转换为ss" Q6 M& J- U( g# _7 u- ?4 P$ o
    24,round[舍入到最接近的日期](day:舍入到最接近的星期日)
1 {* ?1 t( \2 o/ x/ c: y: q    select sysdate S1,% U; A# ]+ X6 j+ L& Q
    round(sysdate) S2 ,2 H; `2 x+ X0 `( q
    round(sysdate,'year') YEAR,
" d3 n) u% K& Q    round(sysdate,'month') MONTH ,
: _  P" S( m# v* @& z7 f5 ?$ u    round(sysdate,'day') DAY from dual5 w6 B5 ?6 C3 |, K; K
    25,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型+ S1 l7 l' n! i
    select sysdate S1,
8 m7 `) E4 Y! Q3 Z' a1 H    trunc(sysdate) S2, //返回当前日期,无时分秒
: `( U7 f4 h' `' b% c  M( J* a    trunc(sysdate,'year') YEAR, //返回当前年的1月1日,无时分秒" h, M* d- u+ p: f
    trunc(sysdate,'month') MONTH , //返回当前月的1日,无时分秒7 o4 P( y+ B& [$ N7 J1 f% m
    trunc(sysdate,'day') DAY //返回当前星期的星期天,无时分秒; r' u) I! q0 K- m5 u
    from dual
" t  G( w6 e8 d, Q4 w) F    26,返回日期列表中最晚日期$ M" V* D6 n! }
    select greatest('01-1月-04','04-1月-04','10-2月-04') from dual
* T- m2 R/ K- U    27.计算时间差
) B3 k. e* C# a1 q1 s    注:oracle时间差是以天数为单位,所以换算成年月,日
% x" U. P: O% ~9 G' ^# _, v; C    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //时间差-年) l" I! M$ s7 o- G& Z( q: A
    select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //时间差-月
# e2 Q/ |# f' q1 y8 g) F    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //时间差-天
- w4 d, g( W+ I0 d* |3 x    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //时间差-时5 y% S. m6 b( E% \% {) C% |2 W
    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //时间差-分" |- v  B' x/ ], X8 y' g
    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-秒0 F( h3 }9 h5 K, k, ^6 o( H: S  T% l
    28.更新时间  y; j: d: W3 ~& [) x% N- v
    注:oracle时间加减是以天数为单位,设改变量为n,所以换算成年月,日
  r1 ~. F8 l! \) N/ l/ a    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-年
: ]5 l* E/ X' z6 E: O# y4 a. x    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual //改变时间-月' Y1 G8 m* f" v* P/ i: @9 T! J" |
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-日
( I! {9 I/ o( f/ j    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-时& h7 u% a. W8 a6 L3 X) c% V6 [
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-分% q& j; E' v; j& q; d2 @6 Y
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-秒" n- |( @/ f7 I) B4 w: y* I, I
    29.查找月的第一天,最后一天% M4 E) s  C3 N% G, f% a& q
    SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,& r- e( {5 U% j' t4 U5 G
    Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
  X- N/ ]/ X2 ^( T- {    Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,1 |5 J6 |; M; ~2 x* r
    LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
2 b' t. ]5 h, r' {! p* k3 z    FROM dual;
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 05:12 , Processed in 0.214232 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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