国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

ORACLE DATE和TIMESTAMP數(shù)據(jù)類型的比較

瀏覽:4日期:2023-11-20 09:10:54
DATE數(shù)據(jù)類型這個(gè)數(shù)據(jù)類型我們實(shí)在是太熟悉了,當(dāng)我們需要表示日期和時(shí)間的話都會(huì)想到date類型。它可以存儲(chǔ)月,年,日,世紀(jì),時(shí),分和秒。它典型地用來表示什么時(shí)候事情已經(jīng)發(fā)生或?qū)⒁l(fā)生。DATE數(shù)據(jù)類型的問題在于它表示兩個(gè)事件發(fā)生時(shí)間間隔的度量粒度是秒。這個(gè)問題將在文章稍后討論timestamp的時(shí)候被解決。可以使用TO_CHAR函數(shù)把DATE數(shù)據(jù)進(jìn)行傳統(tǒng)地包裝,達(dá)到表示成多種格式的目的。SQL> SELECT TO_CHAR(date1,'MM/DD/YYYY HH24:MI:SS') 'Date' FROM date_table;Date---------------------------06/20/2003 16:55:1406/26/2003 11:16:36我見到的大多數(shù)人陷入的麻煩就是計(jì)算兩個(gè)時(shí)間間的間隔年數(shù)、月數(shù)、天數(shù)、小時(shí)數(shù)和秒數(shù)。你需要明白的是,當(dāng)你進(jìn)行兩個(gè)日期的相減運(yùn)算的時(shí)候,得到的是天數(shù)。你需要乘上天天的秒數(shù)(1天=86400秒),然后,你可以再次計(jì)算得到你想要的間隔數(shù)。下面就是我的解決方法,可以精確計(jì)算出兩個(gè)時(shí)間的間隔。我明白這個(gè)例子可以更簡(jiǎn)短些,但是我是為了顯示所有的數(shù)字來強(qiáng)調(diào)計(jì)算方式。1 SELECT TO_CHAR(date1,'MMDDYYYY:HH24:MI:SS') date1, 2 TO_CHAR(date2,'MMDDYYYY:HH24:MI:SS') date2, 3 trunc(86400*(date2-date1))- 4 60*(trunc((86400*(date2-date1))/60)) seconds, 5 trunc((86400*(date2-date1))/60)- 6 60*(trunc(((86400*(date2-date1))/60)/60)) minutes, 7 trunc(((86400*(date2-date1))/60)/60)- 8 24*(trunc((((86400*(date2-date1))/60)/60)/24)) hours, 9 trunc((((86400*(date2-date1))/60)/60)/24) days,10 trunc(((((86400*(date2-date1))/60)/60)/24)/7) weeks11*FROM date_tableDATE1 DATE2SECONDSMINUTES HOURS DAYS WEEKS----------------- ----------------- ---------- ---------- ---------- ---------- ----------06202003:16:55:14 07082003:11:22:57 43 27 1817 206262003:11:16:36 07082003:11:22:57 21 6 012 1TIMESTAMP 數(shù)據(jù)類型DATE數(shù)據(jù)類型的主要問題是它粒度不能足夠區(qū)別出兩個(gè)事件哪個(gè)先發(fā)生。Oracle已經(jīng)在DATE數(shù)據(jù)類型上擴(kuò)展出來了TIMESTAMP數(shù)據(jù)類型,它包括了所有DATE數(shù)據(jù)類型的年月日時(shí)分秒的信息,而且包括了小數(shù)秒的信息。假如你想把DATE類型轉(zhuǎn)換成TIMESTAMP類型,就使用CAST函數(shù)。SQL> SELECT CAST(date1 AS TIMESTAMP) 'Date' FROM t;Date-----------------------------------------------------20-JUN-03 04.55.14.000000 PM26-JUN-03 11.16.36.000000 AM正如你看到的,在轉(zhuǎn)換后的時(shí)間段尾部有了一段“.000000”。這是因?yàn)閺膁ate轉(zhuǎn)換過來的時(shí)候,沒有小數(shù)秒的信息,缺省為0。而且顯示格式是按照參數(shù)NLS_TIMESTAMP_FORMAT定的缺省格式顯示。當(dāng)你把一個(gè)表中date類型字段的數(shù)據(jù)移到另一個(gè)表的timestamp類型字段中去的時(shí)候,可以直接寫INSERT SELECT語句,oracle會(huì)自動(dòng)為你做轉(zhuǎn)換的。1 SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS') 'Date' FROM date_tableDate-------------------06/20/2003 16:55:1406/26/2003 11:16:36TIMESTAMP數(shù)據(jù)的格式化顯示和DATE 數(shù)據(jù)一樣。注重,to_char函數(shù)支持date和timestamp,但是trunc卻不支持TIMESTAMP數(shù)據(jù)類型。這已經(jīng)清楚表明了在當(dāng)兩個(gè)時(shí)間的差別極度重要的情況下,使用TIMESTAMP數(shù)據(jù)類型要比DATE數(shù)據(jù)類型更確切。假如你想顯示TIMESTAMP的小數(shù)秒信息,參考下面:1 SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS:FF3') 'Date' FROM date_tableDate-----------------------06/20/2003 16:55:14:00006/26/2003 11:16:36:000 在上例中,我只現(xiàn)實(shí)了小數(shù)點(diǎn)后3位的內(nèi)容。計(jì)算timestamp間的數(shù)據(jù)差別要比老的date數(shù)據(jù)類型更輕易。當(dāng)你直接相減的話,看看會(huì)發(fā)生什么。結(jié)果將更輕易理解,第一行的17天,18小時(shí),27分鐘和43秒。1 SELECT time1, 2 time2, 3 substr((time2-time1),instr((time2-time1),' ')+7,2) seconds, 4 substr((time2-time1),instr((time2-time1),' ')+4,2) minutes, 5 substr((time2-time1),instr((time2-time1),' ')+1,2) hours, 6 trunc(to_number(substr((time2-time1),1,instr(time2-time1,' '))))  days, 7 trunc(to_number(substr((time2-time1),1,instr(time2-time1,' ')))/7) weeks 8*  FROM date_tableTIME1  TIME2 SECONDS MINUTES HOURS DAYS WEEKS-------------------------  -------------------------- ------- ------- ----- ---- -----06/20/2003:16:55:14:000000 07/08/2003:11:22:57:000000 43 27 1817206/26/2003:11:16:36:000000 07/08/2003:11:22:57:000000 21 06 00121這就意味著不再需要關(guān)心一天有多少秒在麻煩的計(jì)算中。因此,得到天數(shù)、月數(shù)、天數(shù)、時(shí)數(shù)、分鐘數(shù)和秒數(shù)就成為用substr函數(shù)摘取出數(shù)字的事情了。系統(tǒng)日期和時(shí)間為了得到系統(tǒng)時(shí)間,返回成date數(shù)據(jù)類型。你可以使用sysdate函數(shù)。SQL> SELECT SYSDATE FROM DUAL;為了得到系統(tǒng)時(shí)間,返回成timestamp數(shù)據(jù)類型。你可以使用systimpstamp函數(shù)。SQL> SELECT SYSTIMESTAMP FROM DUAL;你可以設(shè)置初始化參數(shù)FIXED_DATE指定sysdate函數(shù)返回一個(gè)固定值。這用在測(cè)試日期和時(shí)間敏感的代碼。注重,這個(gè)參數(shù)對(duì)于systimestamp函數(shù)無效。SQL> ALTER SYSTEM SET fixed_date = '2003-01-01-10:00:00';System altered.SQL> select sysdate from dual;SYSDATE---------01-JAN-03SQL> select systimestamp from dual;SYSTIMESTAMP---------------------------------------------------------09-JUL-03 11.05.02.519000 AM -06:00當(dāng)使用date和timestamp類型的時(shí)候,選擇是很清楚的。你可以隨意處置date和timestamp類型。當(dāng)你試圖轉(zhuǎn)換到更強(qiáng)大的timestamp的時(shí)候,需要注重,它們既有類似的地方,更有不同的地方,而足以造成破壞。兩者在簡(jiǎn)潔和間隔尺寸方面各有優(yōu)勢(shì),請(qǐng)合理地選擇。
主站蜘蛛池模板: 奇米888四色在线精品 | 成人精品一级毛片 | 久久精品视频免费播放 | 国产一区在线观看免费 | a级毛片免费观看网站 | 91男女视频 | 成年午夜性爽快免费视频不卡 | 亚洲www| 国产综合精品一区二区 | 天堂免费在线视频 | 欧美成人高清 | 免费黄色毛片视频 | 国产成人高清在线观看播放 | f性欧美 | 丰满寡妇一级毛片 | 国产精品高清视亚洲一区二区 | 日本黄色大片免费观看 | 香港台湾经典三级a视频 | 韩国毛片在线 | 亚洲福利精品一区二区三区 | 国产精品一级香蕉一区 | 国产欧美精品综合一区 | 91热久久免费频精品动漫99 | 国产成人一区二区三区视频免费 | 在线观看的毛片 | 日韩一级在线播放免费观看 | 一级毛片成人免费看a | 91国内精品久久久久怡红院 | 国产jk福利视频在线观看 | 精品国产一区在线观看 | 乱子伦一级在线现看 | 高清欧美不卡一区二区三区 | 亚洲欧美日韩中文字幕在线 | 亚洲综合视频在线观看 | 香蕉久久夜色精品国产2020 | 国产区精品在线 | 国产素人在线观看 | 国产做a爰片久久毛片 | 国内久久 | 欧美人性影片免费看 | 一级毛片免费看 |