DATE格式轉換
上一篇 / 下一篇 2008-01-29 11:26:10 / 个人分类:SQL
TO_DATE格式 ITPUB个人空间k+lm,UT
Day: ITPUB个人空间`&[ t3~Q1_-oU
dd number 12 ITPUB个人空间R,N#q+t{8N0F
dy abbreviated fri ITPUB个人空间G"Q
FP%kKCU
day spelled out friday ITPUB个人空间W}7E[5AEb6j5m~
ddspth spelled out, ordinal twelfth ITPUB个人空间
^8gW:m0a0I!|}R
Month:
l _#\;F5U{eCI0mm number 03
*U&xj&^~d{!Eg0mon abbreviated mar ITPUB个人空间bf7r/F,h[4\
month spelled out march ITPUB个人空间F9^p `6ejsz
Year:
O3oi8dZp"m0yy two digits 98 ITPUB个人空间F%IXu'w*j)I&T(G
yyyy four digits 1998 ITPUB个人空间(sPqm%S'x pg
C%[3qPa.^d/^1h024小时格式下时间范围为: 0:00:00 - 23:59:59....
N1Kc4{(l-\(Z%_5|9D012小时格式下时间范围为: 1:00:00 - 12:59:59 ....
1cZe'i2e ca VS$h*@ H01. ITPUB个人空间-Zi#px/C)Q
日期和字符转换函数用法(to_date,to_char)
(cr$_yCo&b0ITPUB个人空间kn8pu%`1?W
[$f|
2. ITPUB个人空间!~f)~4|#H
e
select to_char( to_date(222,'J'),'Jsp') from dual ITPUB个人空间
?Y}%K^O-y3wdA
ITPUB个人空间U?0y%j!L"P;}y"`
显示Two Hundred Twenty-Two
*Lp'Fssn.} [0
T}2i/zs` Od%G03. ITPUB个人空间TX1fReWF
求某天是星期几
L9uuv[D`w0select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; ITPUB个人空间,xy!N;r*Y {?|sI5z
星期一
/i*P&J2dq*E`K0select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; ITPUB个人空间8hhrm}
monday ITPUB个人空间
Z#S&[%rG^
设置日期语言 ITPUB个人空间-z5F4s'MA
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
I.Cuw J0也可以这样 ITPUB个人空间B*|
@EO,Q W x
TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
XpWZls0ITPUB个人空间*P.]~1uu-R\
4.
8Orpv
GW-b
F3^T#n0两个日期间的天数 ITPUB个人空间
q#Fr8n}E}"sr j4x
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual; ITPUB个人空间0Sw#\M~9h0PP
$Or:A A])r1bH05. 时间为null的用法 ITPUB个人空间4w:Yu+dQ9[Rj`
select id, active_date from table1
7zA,qfw:Q0UNION ITPUB个人空间
Fx:lr
B:b e
select 1, TO_DATE(null) from dual;
7aAey%xU9N0ITPUB个人空间%r(Og&RF:o H#pQO
_
注意要用TO_DATE(null)
;t eK~4L0ITPUB个人空间ua
d
W4Cw
6. ITPUB个人空间] }:n$V)f&~
a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd') ITPUB个人空间-S4c%_Uf"S
那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
{IJ8t&mI*_GC6]@0所以,当时间需要精确的时候,觉得to_char还是必要的
9jGFb5m,Y07. 日期格式冲突问题
(yym xNk%K x d0输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
6i4vLm;Wo5d/cW0alter system set NLS_DATE_LANGUAGE = American ITPUB个人空间!R*{z:v(L
cf
alter session set NLS_DATE_LANGUAGE = American ITPUB个人空间9lx%tw_d3uU@
或者在to_date中写
8B,_1VS \0select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; ITPUB个人空间Bp
P!v3Q']'@
注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多, ITPUB个人空间js:z
oi
p%Y
可查看
*l,k,r@K9N/N;Oos0select * from nls_session_parameters
;\W[qQy zO1i9j0select * from V$NLS_PARAMETERS ITPUB个人空间#hqk7o:~{
ITPUB个人空间9hx)LJL+C6dC"G`rU
8.
DD5F:t9V+O7j0select count(*) ITPUB个人空间*g"}dx8Qi}
from ( select rownum-1 rnum ITPUB个人空间`*`;dP:r3h
from all_objects
6?Z\uW:y~q0where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002- ITPUB个人空间{*hA xO
02-01','yyyy-mm-dd')+1
HIJ'n| qZX0) ITPUB个人空间1N?~1`s
E
where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
)i+xk#l|$I.K7Be4d0not ITPUB个人空间!sf)k8t
Si;V
in ( '1', '7' )
}4s1Y"Ky0ITPUB个人空间}G!_,V3[Al~aqf
查找2002-02-28至2002-02-01间除星期一和七的天数 ITPUB个人空间m'pF},t p P%}
H;w
在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).
'{?,bw+PpJ+C0ITPUB个人空间s(em{+l
[,j
9.
(O)Z;u-P_0q0select months_between(to_date('01-31-1999','MM-DD-YYYY'),
jC,?'S?i,Xxc0to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
!])F
{
X^ I2BvH01
dOn~[+A0
o4{e'|{-G(k?RF0select months_between(to_date('02-01-1999','MM-DD-YYYY'),
SZH([ q"c9g0to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; ITPUB个人空间
SO{ llP|
ITPUB个人空间
X"bn*[
TC0D
1.03225806451613 ITPUB个人空间7tn|!gAA
10. Next_day的用法 ITPUB个人空间Q'xR*Mx(aT
Next_day(date, day) ITPUB个人空间EJkO;k~
ITPUB个人空间1t h8g"[!B0F
Monday-Sunday, for format code DAY ITPUB个人空间a(T4Mca
Mon-Sun, for format code DY
4xa8e)j;Ag!X01-7, for format code D ITPUB个人空间au2Q}&we V
ITPUB个人空间
B*SI1@)a
11
Z9O^:e
K3m#y
Tq
~S0select to_char(sysdate,'hh:mi:ss') TIME from all_objects
-u*Ldh.W-OoO,y3u0注意:第一条记录的TIME 与最后一行是一样的
t3ejc]&Bw0可以建立一个函数来处理这个问题 ITPUB个人空间
PZ"XS9n,@ }~e
create or replace function sys_date return date is
W4n^;e;O&s0begin ITPUB个人空间%dMx0O4a x'BnG:W#x
return sysdate;
;f3o:gJy9Ah0end;
(S:a2jg"T
m"k0
/\
HpJsH(AG0select to_char(sys_date,'hh:mi:ss') from all_objects; ITPUB个人空间w'tK8E(zUF
12.
X3@uc6T)Z_7x0获得小时数
"Q9U}-Fin N.j]4v0ITPUB个人空间i4M9H%TR'b GC
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer ITPUB个人空间;[Eb+P&Qe&C
n4S%m0\
SQL> select sysdate ,to_char(sysdate,'hh') from dual;
*z&P3?7L+XF f j0ITPUB个人空间2P$n(xA8o!z3t
SYSDATE TO_CHAR(SYSDATE,'HH') ITPUB个人空间$n}JzqTYwk
-------------------- --------------------- ITPUB个人空间YYzQ8Mf5B
2003-10-13 19:35:21 07
+O9z9\7sf x0ITPUB个人空间aeVX9a8_ s~&fQ
SQL> select sysdate ,to_char(sysdate,'hh24') from dual;
2Z)LE#J Sx?~nF0
'||nju0SYSDATE TO_CHAR(SYSDATE,'HH24')
G
|(oJq!kgRT(pC0-------------------- ----------------------- ITPUB个人空间RJ Wp2Ct*\v
2003-10-13 19:35:21 19 ITPUB个人空间q!w!U[1N
g
NV
n:`^+| Td0获取年月日与此类似 ITPUB个人空间6Qrs!FI7Z#UwO{
13. ITPUB个人空间U!h
QF9t9SJ(w
年月日的处理 ITPUB个人空间c5E+p-JTj
select older_date, ITPUB个人空间1m.lD)]k&i1a,@N
newer_date,
9a
ktZ_$P0years,
m5I T*EU0months,
+U lwHJ
O0[0abs(
[`N,E| Q:J+o0trunc( ITPUB个人空间kMe@
g&@N)c
newer_date- ITPUB个人空间gTO{3Z%OQ+g
add_months( older_date,years*12+months ) ITPUB个人空间!x
}*rf6?7S"c^
) ITPUB个人空间w[&e.@E
) days ITPUB个人空间Ls*JG3?\1m{
from ( select
[y1~bo0trunc(months_between( newer_date, older_date )/12) YEARS,
3lX`QDps3sD:p0mod(trunc(months_between( newer_date, older_date )),
nK!x;^5X012 ) MONTHS,
PFw)D}p*Km@0newer_date,
~Ce)NM]R0older_date ITPUB个人空间W(g3tp&?kI ^r\
from ( select hiredate older_date, ITPUB个人空间Ngrf/B+d#yX
add_months(hiredate,rownum)+rownum newer_date ITPUB个人空间nyF I9G!v
from emp )
m6Ky%|@#Zz6Z+b6b;O0)
/Kb3ApQ.H2~4z)y)a0ITPUB个人空间1x-MrvPF%z2B&ZY
14.
8|(s#Q7S wv0处理月份天数不定的办法
2?HE;I]]0@n*bv0select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual
u`d d0OYF9b
V0ITPUB个人空间
TO
f x!o^ a-|gh
16. ITPUB个人空间?+`b"VDc5_
找出今年的天数
L^1Y+^
nPRL_)T0select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
1oKT(si(|0
^'}?AGzS0闰年的处理方法 ITPUB个人空间(RCh6eyZQ4L
to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' ) ITPUB个人空间%|1a'YV
Pa;^D5TQ"a
如果是28就不是闰年
*Pm)V-l6xSi!xHg0
,}q;{Q%q
e017.
u(RSO0A^0yyyy与rrrr的区别
I9PEervPs;W0'YYYY99 TO_C
n t\z#P4X?0------- ---- ITPUB个人空间Pi$nCYc
yyyy 99 0099
`k"k!{;d"W0rrrr 99 1999 ITPUB个人空间-i3HQ#J0]7S%[
yyyy 01 0001
I/m^
N4u
K,o0rrrr 01 2001
)CTg(iVl(if`0
:x,rK$qW'g?E018.不同时区的处理 ITPUB个人空间^gt)qa{?
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate ITPUB个人空间-c%ys1s'O K4O"J8y5w
from dual;
*M/{'w`!}0
%ST1ot1L019. ITPUB个人空间P!j QHG
5秒钟一个间隔 ITPUB个人空间I0Qv]%mJ(?
Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS') ITPUB个人空间/Du
q;Y6E9O
from dual
9~5e`,f9w"w;_-@(J"_5z&x0
9C~ y@%Q+|rc:P02002-11-1 9:55:00 35786
+cQ$qM{c2_t*c0SSSSS表示5位秒数 ITPUB个人空间:h#SLr.Q
/ud+J9E(Rf5I a W020.
'i_R0|%I0一年的第几天 ITPUB个人空间xms.LDPw3U5r
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual ITPUB个人空间:E0FRpNH
310 2002-11-6 10:03:51 ITPUB个人空间Z"vVge/C6ri
ep1H+O+WP
m021.计算小时,分,秒,毫秒 ITPUB个人空间0~ N'{.HwjU$g*lJ
select
A9bJ
nWs8H
F0Days,
1?$qfK^?0A,
x
P2H*yb(uM0TRUNC(A*24) Hours, ITPUB个人空间
n7n\$gOn:`%Njk
TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes, ITPUB个人空间zn3a?S:| }n
TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds, ITPUB个人空间eBo0FyB*w}
TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds ITPUB个人空间o8d-I.E3V!B
from ITPUB个人空间R,f6Gu6]d7w
(
6@L\[7lF'l0select ITPUB个人空间`'U/mOPB
trunc(sysdate) Days,
yw4mWVc0sysdate - trunc(sysdate) A ITPUB个人空间sH:JW\8`K$A)a
from dual