Oracle毫秒:從多個方面詳解

一、Oracle毫秒數

在Oracle資料庫中,日期類型使用毫秒數(以1970年1月1日為基準點,即UNIX_TIMESTAMP)作為存儲方式。因此,我們可以通過獲取時間的毫秒數來操作日期,比如在WHERE語句中進行時間範圍查詢。


--獲取當前時間的毫秒數
SELECT SYSDATE, TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss'), (SYSDATE - TO_DATE('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 * 1000 AS MILLISECOND FROM DUAL;

--獲取某個時間的毫秒數
SELECT TO_TIMESTAMP('2018-05-21 11:22:33','yyyy-mm-dd hh24:mi:ss') AS TIMESTAMP, (TO_TIMESTAMP('2018-05-21 11:22:33','yyyy-mm-dd hh24:mi:ss') - TO_DATE('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 * 1000 AS MILLISECOND FROM DUAL;

二、Oracle毫秒轉換為年月日時分秒

將毫秒數轉換為可讀的日期時間格式是我們常遇到的需求。Oracle可以使用TO_CHAR函數實現。


--毫秒數轉換為標準的年月日時分秒格式
SELECT TO_CHAR(TO_DATE('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss') + (1526866927432 / 1000 / 60 / 60 / 24),'yyyy-mm-dd hh24:mi:ss') AS DATETIME FROM DUAL;

三、Oracle毫秒格式

在Oracle中,相比其他類型的日期,毫秒數的表示方式稍有不同。Oracle採用分數形式的小數(即1/24/60/60/1000)表示毫秒數,且默認情況下是保留6位精度。因此,需要注意精度和格式的問題,否則可能導致計算結果不準確。

四、Oracle毫秒時間格式

Oracle提供很多內置函數來對日期時間格式進行處理,使用這些函數能夠大大簡化操作。比如,TO_TIMESTAMP函數可以將字元串轉換為日期類型,TO_CHAR函數可以將日期類型轉換為字元串類型,而EXTRACT函數可以從日期類型中提取出需要的部分。


--將毫秒數轉換為時間格式
SELECT TO_CHAR(TO_TIMESTAMP('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss') + NUMTODSINTERVAL(1526866927432,'MILLISECOND'),'yyyy-mm-dd hh24:mi:ss') AS DATETIME FROM DUAL;

--從時間中提取出毫秒數
SELECT EXTRACT(MILLISECOND FROM TO_TIMESTAMP('2018-05-21 11:22:33.123456','yyyy-mm-dd hh24:mi:ss.ff6')) AS MILLISECOND FROM DUAL;

五、Oracle毫秒轉時間

毫秒數和時間之間的相互轉換,在Oracle操作中非常頻繁。使用$numtodsinterval函數可以將毫秒數轉換為時間類型,而用extract函數則可以將時間類型轉換為毫秒數。


--毫秒數轉換為時間
SELECT NUMTODSINTERVAL(1526866927432,'MILLISECOND') AS DURATION FROM DUAL;

--時間轉換為毫秒數
SELECT EXTRACT(MILLISECOND FROM NUMTODSINTERVAL(1,'HOUR') + NUMTODSINTERVAL(1,'MINUTE') + NUMTODSINTERVAL(1,'SECOND') + NUMTODSINTERVAL(1,'MILLISECOND')) AS MILLISECOND FROM DUAL;

六、Oracle毫秒相減

在Oracle中,可以將兩個日期類型相減得到它們之間的間隔。這點對於計算時間差或是時間區間等操作非常便捷。使用($$date1-$$date2)*24*60*60*1000可以將兩個日期相減後求得毫秒數。


--計算時間差(單位為毫秒)
SELECT (TO_DATE('2018-05-31 13:40:00','yyyy-mm-dd hh24:mi:ss') - TO_DATE('2018-05-10 10:08:32','yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 * 1000 AS DURATION FROM DUAL;

七、Oracle毫秒轉日期

在Oracle中,DATE類型可以通過加減操作來進行位移,可以便捷地計算出特定日期之後或之前的日期。


--將毫秒數轉換為日期
SELECT TO_CHAR(TO_DATE('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss') + NUMTODSINTERVAL(1526866927432,'MILLISECOND'),'yyyy-mm-dd') AS DATE FROM DUAL;

--計算2天之後的日期
SELECT TO_CHAR(TO_DATE('2018-05-21 11:22:33','yyyy-mm-dd hh24:mi:ss') + 2,'yyyy-mm-dd hh24:mi:ss') AS DATE FROM DUAL;

八、Oracle毫秒數轉化為日期

有時候我們需要將毫秒數轉化為日期類型,可以使用TO_DATE函數將毫秒數轉化為字元串類型,再使用TO_DATE函數將字元串類型轉化為日期類型。


--將毫秒數轉化為日期
SELECT TO_DATE(TO_CHAR(TO_DATE('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss') + NUMTODSINTERVAL(1526866927432,'MILLISECOND'),'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') AS DATE FROM DUAL;

九、Oracle毫秒數轉日期

使用TO_CHAR函數,可以將毫秒數轉換為特定格式的日期類型。


--毫秒數轉換為日期類型
SELECT TO_CHAR(TO_DATE('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss') + (1526866927432 / 1000 / 60 / 60 / 24),'yyyy-mm-dd hh24:mi:ss') AS DATE FROM DUAL;

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/198502.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-04 10:25
下一篇 2024-12-04 10:25

相關推薦

發表回復

登錄後才能評論