亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle date 和 timestamp 區別詳解

2024-08-29 13:59:49
字體:
來源:轉載
供稿:網友

Oracle date 和 timestamp 區別詳解

1.DATE數據類型

     這個數據類型我們實在是太熟悉了,當我們需要表示日期和時間的話都會想到date類型。它可以存儲月,年,日,世紀,時,分和秒。它典型地用來表示什么時候事情已經發生或將要發生。

     DATE數據類型的問題在于它表示兩個事件發生時間間隔的度量粒度是秒。這個問題將在稍后討論timestamp的時候被解決??梢允褂肨O_CHAR函數把DATE數據進行傳統地包裝,達到表示成多種格式的目的。

SQL> SELECT TO_CHAR(date1,'MM/DD/YYYY HH24:MI:SS') "Date" FROM date_table;  Date  ---------------------------  06/20/2003 16:55:14  06/26/2003 11:16:36

   大多數人陷入的麻煩就是計算兩個時間間的間隔年數、月數、天數、小時數和秒數。你需要明白的是,當你進行兩個日期的相減運算的時候,得到的是天數。你需要乘上每天的秒數(1天=86400秒),然后,你可以再次計算得到你想要的間隔數。下面就是我的解決方法,可以精確計算出兩個時間的間隔。我明白這個例子可以更簡短些,但是我是為了顯示所有的數字來強調計算方式。

SELECT TO_CHAR(date1, 'MMDDYYYY:HH24:MI:SS') date1,    TO_CHAR(date2, 'MMDDYYYY:HH24:MI:SS') date2,    trunc(86400 * (date2 - date1)) -    60 * (trunc((86400 * (date2 - date1)) / 60)) seconds,    trunc((86400 * (date2 - date1)) / 60) -    60 * (trunc(((86400 * (date2 - date1)) / 60) / 60)) minutes,    trunc(((86400 * (date2 - date1)) / 60) / 60) -    24 * (trunc((((86400 * (date2 - date1)) / 60) / 60) / 24)) hours,    trunc((((86400 * (date2 - date1)) / 60) / 60) / 24) days,    trunc(((((86400 * (date2 - date1)) / 60) / 60) / 24) / 7) weeks FROM date_tableDATE1 DATE2 SECONDS MINUTES HOURS DAYS WEEKS ----------------- ----------------- ---------- ---------- ---------- ---------- ---------- 06202003:16:55:14 07082003:11:22:57 43 27 18 17 2 06262003:11:16:36 07082003:11:22:57 21 6 0 12 1

2.TIMESTAMP 數據類型

    DATE數據類型的主要問題是它粒度不能足夠區別出兩個事件哪個先發生。ORACLE已經在DATE數據類型上擴展出來了TIMESTAMP數據類型,它包括了所有DATE數據類型的年月日時分秒的信息,而且包括了小數秒的信息。如果你想把   DATE類型轉換成TIMESTAMP類型,就使用CAST函數。

 SQL> SELECT CAST(date1 AS TIMESTAMP) "Date" FROM t;  Date  -----------------------------------------------------  20-JUN-03 04.55.14.000000 PM  26-JUN-03 11.16.36.000000 AM

     正如你看到的,在轉換后的時間段尾部有了一段“.000000”。這是因為從date轉換過來的時候,沒有小數秒的信息,缺省為0。而且顯示格式是按照參數NLS_TIMESTAMP_FORMAT定的缺省格式顯示。當你把一個表中date類型字段的數據移到另一個表的timestamp類型字段中去的時候,可以直接寫INSERT SELECT語句,oracle會自動為你做轉換的。

SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS') "Date" FROM date_table  Date -------------------  06/20/2003 16:55:14  06/26/2003 11:16:36

    TIMESTAMP數據的格式化顯示和DATE 數據一樣。注意,to_char函數支持date和timestamp,但是trunc卻不支持TIMESTAMP數據類型。這已經清楚表明了在當兩個時間的差別極度重要的情況下,使用TIMESTAMP數據類型要比DATE數據類型更確切。

 SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS:FF3') "Date" FROM date_table  Date  -----------------------  06/20/2003 16:55:14:000  06/26/2003 11:16:36:000

     計算timestamp間的數據差別要比老的date數據類型更容易。當你直接相減的話,看看會發生什么。結果將更容易理解,第一行的17天,18小時,27分鐘和43秒。

SELECT time1,    time2,    substr((time2 - time1), instr((time2 - time1), ' ') + 7, 2) seconds,    substr((time2 - time1), instr((time2 - time1), ' ') + 4, 2) minutes,    substr((time2 - time1), instr((time2 - time1), ' ') + 1, 2) hours,    trunc(to_number(substr((time2 - time1), 1, instr(time2 - time1, ' ')))) days,    trunc(to_number(substr((time2 - time1), 1, instr(time2 - time1, ' '))) / 7) weeks FROM date_table TIME1 TIME2 SECONDS MINUTES HOURS DAYS WEEKS ------------------------- -------------------------- ------- ------- ----- ---- ----- 06/20/2003:16:55:14:000000 07/08/2003:11:22:57:000000 43 27 18 17 2 06/26/2003:11:16:36:000000 07/08/2003:11:22:57:000000 21 06 00 12 1

     這就意味著不再需要關心一天有多少秒在麻煩的計算中。因此,得到天數、月數、天數、時數、分鐘數和秒數就成為用substr函數摘取出數字的事情了。

3.系統日期和時間

     為了得到系統時間,返回成date數據類型。你可以使用sysdate函數。

SQL> SELECT SYSDATE FROM DUAL;

     為了得到系統時間,返回成timestamp數據類型。你可以使用systimpstamp函數。

SQL> SELECT SYSTIMESTAMP FROM DUAL;

    你可以設置初始化參數FIXED_DATE指定sysdate函數返回一個固定值。這用在測試日期和時間敏感的代碼。注意,這個參數對于systimestamp函數無效。

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

4.date和timestamp 的區別

     date類型是Oracle常用的日期型變量,他的時間間隔是秒。兩個日期型相減得到是兩個時間的間隔,注意單位是“天”。例如:查看一下當前距離倫敦奧運會開幕還有多長時間:

 select to_date('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-sysdate from dual

結果是:92.2472685185185天,然后你根據相應的時間換算你想要的間隔就行!這個結果可能對程序員有用,對于想直接看到結果的人,這個數字還不是很直觀,所以,就引出了timestamp類型

timestamp是DATE類型的擴展,可以精確到小數秒(fractional_seconds_precision),可以是0 to9,缺省是6。兩個timestamp相減的話,不能直接的得到天數書,而是得到,

多少天,多少小時,多少秒等,例如:同樣查看一下當前距離倫敦奧運會開幕還有多長時間.

select to_timestamp('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual

      結果是:+000000092 05:51:24.032000000,稍加截取,就可以得到92天5小時,51分鐘,24秒,這樣用戶看起來比較直觀一些!但是這個數字對程序員來說不是很直觀了,如果想要具體的時間長度的話,并且精度不要求到毫秒的話,可以將timestamp類型轉成date類型,然后直接相減即可。

5.date和timestamp之間的相互轉換可以通過

to_char來轉換timestamp——>date:

 select to_date(to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual

 

date ——>timestamp:

select to_timestamp(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual

     當使用date和timestamp類型的時候,選擇是很清楚的。你可以隨意處置date和timestamp類型。當你試圖轉換到更強大的timestamp的時候,需要注意,它們既有類似的地方,更有不同的地方,而足以造成破壞。兩者在簡潔和間隔尺寸方面各有優勢,請合理地選擇。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av国产在线| 亚洲字幕在线观看| 国产成人精品a视频一区www| 欧美丰满少妇xxxxx| 国产成人av在线| 欧美成人激情视频免费观看| 午夜精品久久久久久久99热| 人人做人人澡人人爽欧美| 国产亚洲视频在线观看| 色老头一区二区三区| 亚洲精品电影网| 日韩一区二区久久久| 欧美激情区在线播放| 欧美激情综合亚洲一二区| 国产九九精品视频| 国产综合久久久久久| 日韩免费不卡av| 国内精品国产三级国产在线专| 欧洲精品在线视频| 亚洲午夜精品久久久久久久久久久久| 高清在线视频日韩欧美| 久久精品视频在线| 亚洲欧美三级在线| 欧美成人免费在线观看| 久久久亚洲福利精品午夜| 亚洲精品中文字幕av| 91高清免费视频| 欧美精品免费看| 一本色道久久综合狠狠躁篇怎么玩| 国产精品极品尤物在线观看| 亚洲男人天堂手机在线| 亚洲国产精品久久久久秋霞不卡| 国产成人久久精品| 大胆人体色综合| 国产精品色午夜在线观看| 久久99久久99精品免观看粉嫩| 国产精品爱啪在线线免费观看| 日本精品免费一区二区三区| 亚洲高清av在线| 欧美—级高清免费播放| 久久免费国产视频| 亚洲色图在线观看| 精品国产乱码久久久久酒店| 国产九九精品视频| 欧美性黄网官网| 亚洲mm色国产网站| 性欧美暴力猛交69hd| 91超碰caoporn97人人| 日韩精品久久久久久福利| 国产精选久久久久久| 亚洲人成网在线播放| 国产一区二区三区网站| 91精品久久久久久综合乱菊| 欧美电影免费观看大全| 国产精品久久久久久久久久| 久久免费国产视频| 国产精品视频一区国模私拍| 日本在线精品视频| 欧美视频在线免费| 中文字幕精品在线| 亚洲二区中文字幕| 欧美高清视频一区二区| 国产久一一精品| 日韩av免费在线播放| 在线亚洲午夜片av大片| 国产美女直播视频一区| 日韩电影中文字幕在线| 欧美午夜女人视频在线| 97国产成人精品视频| 日日噜噜噜夜夜爽亚洲精品| 国产99久久精品一区二区 夜夜躁日日躁| 国产成人亚洲综合91| 欧美性做爰毛片| 亚洲精品中文字幕av| 成人黄色激情网| 日韩av在线直播| 亚洲裸体xxxx| 日本一本a高清免费不卡| 亚洲精品在线91| 日本国产一区二区三区| 国产精品一区二区三区在线播放| 91久久精品在线| 国产做受高潮69| 欧美精品一二区| 欧美日韩综合视频网址| 日韩美女视频免费看| 亚洲字幕一区二区| 欧美日韩性视频在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 91精品一区二区| 国产偷国产偷亚洲清高网站| 亚洲国产第一页| 亚洲成人精品视频在线观看| 久久精品国产久精国产思思| 亚洲国产精品va在线看黑人动漫| 国产精品久久网| 久久久久久久影视| 欧美专区中文字幕| 伊人久久综合97精品| 亚洲精品天天看| 国产精品ⅴa在线观看h| 欧美中文字幕在线| 国产精品久久久久av免费| 午夜精品一区二区三区在线视频| 一区二区日韩精品| 日韩精品免费看| 亚洲第一区中文字幕| 国产亚洲a∨片在线观看| 亚洲欧美日韩爽爽影院| 992tv成人免费视频| 日韩欧美视频一区二区三区| 浅井舞香一区二区| 国产精品成人一区二区三区吃奶| 国内揄拍国内精品| 精品福利在线视频| 国产精品美女呻吟| 91精品国产高清自在线| 91免费人成网站在线观看18| 日本精品一区二区三区在线播放视频| 精品国产乱码久久久久久天美| 日韩精品亚洲视频| 国内揄拍国内精品少妇国语| 91av视频在线| 欧美黄色成人网| 在线看片第一页欧美| 国产欧美一区二区白浆黑人| 日韩在线视频线视频免费网站| 日韩欧美精品在线观看| 久久69精品久久久久久久电影好| 国产精品中文久久久久久久| 日韩av123| 久久久久久久一区二区| 美女999久久久精品视频| 亚洲色图第一页| 精品亚洲永久免费精品| 美女福利精品视频| 亚洲成年网站在线观看| 日韩亚洲精品电影| 久久综合免费视频| 曰本色欧美视频在线| 国产一区深夜福利| 亚洲欧美国产精品久久久久久久| 午夜精品99久久免费| 欧美大肥婆大肥bbbbb| 91wwwcom在线观看| 亚洲午夜色婷婷在线| 日韩亚洲欧美中文在线| 国产精品国产自产拍高清av水多| 欧美高清第一页| 欧美午夜www高清视频| 日韩精品极品视频免费观看| 欧美性色19p| 国内精品视频在线| 国产成人高潮免费观看精品| 久久露脸国产精品| 亚洲天堂av女优| 国产成人精品一区二区在线| 亚洲精品电影在线| 国产精品成久久久久三级| 国产在线拍揄自揄视频不卡99| 成人a级免费视频| 亚洲精品狠狠操| 欧美一级免费看| 久久视频免费在线播放|