日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle中的date与timestamp

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中的date与timestamp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ORACLE中存儲DATE和時間信息的話,實際上你有兩種字段數據類型的選擇(9i)。

DATE數據類型

可以存儲月,年,日,世紀,時,分和秒。度量粒度是秒

以使用TO_CHAR函數把DATE數據進行傳統地包裝,達到表示成多種格式的目的

SELECT TO_CHAR(sysdate,'MM/DD/YYYY HH24:MI:SS') "Date" FROM dual

大多數人陷入的麻煩就是計算兩個時間間的間隔年數、月數、天數、小時數和秒數。你需要明白的是,當你進行兩個日期的相減運算的時候,得到的是“帶小數位的天數”。

可以通過一個函數將天數轉換成“天時分秒”格式:

CREATE OR REPLACE FUNCTION F_DAYS2STR(P_DAYS IN NUMBER DEFAULT 0)
??? RETURN VARCHAR2 IS
???
--Ver:1.0
???
--Created by xsb on 2005-05-26
???
--For: 將天數轉換成天時分秒格式
??? DAYS?? NUMBER := NVL(P_DAYS,
0);
??? VD???? NUMBER;
--
??? VH???? NUMBER;
--小時
??? VM???? NUMBER;
--
??? VS???? NUMBER;
--
??? RESULT VARCHAR2(
100); --返回值
BEGIN
??? VD := TRUNC(DAYS);
??? VH := TRUNC((DAYS - VD) *
24);
??? VM := TRUNC((DAYS - VD - VH /
24) * 24 * 60);
??? VS := TRUNC((DAYS - VD - VH /
24 - VM / 24 / 60) * 24 * 60 * 60);
??? SELECT DECODE(VD,
0, '', VD || '') || DECODE(VH, 0, '', VH || '小時') ||DECODE(VM, 0, '', VM || '') || DECODE(VS, 0, '', VS || '')?? INTO RESULT FROM DUAL;
??? RETURN(RESULT);
END;

TIMESTAMP 數據類型

它包括了所有DATE數據類型的年月日時分秒的信息,而且包括了小數秒的信息。

SELECT sysdate,systimestamp FROM dual

注意,to_char函數支持datetimestamp,但是trunc卻不支持TIMESTAMP數據類型。

SELECT sysdate,systimestamp,to_char(systimestamp,'yyyymmdd hh24:mi:ssxff3') FROM dual

當你直接相減的話,看看會發生什么。結果將更容易理解,

select systimestamp-systimestamp from dual

這就意味著不用再通過麻煩的計算求出多少天多少秒,用substr函數摘取出其中的數字即可!

結論:當使用datetimestamp類型的時候,選擇是很清楚的。你可以隨意處置datetimestamp類型。當你的時間粒度必須精確至秒以下時,可以考慮使用timestamp

再來看如何實現:將天數轉換成“天時分秒”格式:

使用DATE數據類型:

create table t2 (d1 date,d2 date) ;
INSERT INTO T2 VALUES (SYSDATE, SYSDATE +
1.1234);
SELECT D1, D2, D2 - D1, F_DAYS2STR(D2 - D1),
?????????? ?CAST(D2 AS TIMESTAMP) - CAST(D1 AS TIMESTAMP)
??? FROM T2


SELECT TO_NUMBER(SUBSTR(D21,
1, INSTR(D21, ' '))) D,
?????????? ?SUBSTR(D21, INSTR(D21,
' ') + 1, 2) H,
?????????? ?SUBSTR(D21, INSTR(D21,
' ') + 4, 2) M,
?????????? ?SUBSTR(D21, INSTR(D21,
' ') + 7, 2) S
??? FROM (SELECT CAST(D2 AS TIMESTAMP) - CAST(D1 AS TIMESTAMP) D21
?????? ??? FROM T2)

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Oracle中的date与timestamp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。