在Oracle 10g中執行此SQL後:不同CURRENT_TIMESTAMP和SYSDATE在Oracle
SELECT SYSDATE, CURRENT_TIMESTAMP FROM DUAL
我收到這個陌生的輸出:
什麼是時間差的原因是什麼? 服務器時間等於SYSDATE值的
在Oracle 10g中執行此SQL後:不同CURRENT_TIMESTAMP和SYSDATE在Oracle
SELECT SYSDATE, CURRENT_TIMESTAMP FROM DUAL
我收到這個陌生的輸出:
什麼是時間差的原因是什麼? 服務器時間等於SYSDATE值的
CURRENT_DATE
和CURRENT_TIMESTAMP
返回會話時區中的當前日期和時間。
SYSDATE
和SYSTIMESTAMP
返回系統日期和時間 - 也就是數據庫所在的系統的日期和時間。
如果您的客戶端會話與數據庫所在的服務器不在同一時區(或者說它不是通過您的NLS設置),混合SYS*
和CURRENT_*
函數將返回不同的值。他們都是正確的,他們只是代表不同的事情。它看起來像你的服務器是(或者認爲它是)在+4:00時區,而你的客戶端會話是在+4:30時區。
如果時鐘不同步,您可能會看到時間上的細微差異,這在這裏似乎沒有問題。
SYSDATE返回系統日期,在其上駐留數據庫
CURRENT_TIMESTAMP返回會話時區中的當前日期和時間的系統的,在數據類型時間標記值WITH TIME ZONE
執行此comman
ALTER SESSION SET TIME_ZONE = '+3:0';
,它會爲您提供相同的結果。
SYSDATE
,SYSTIMESTAMP
返回數據庫的日期和時間標記,而current_date
,current_timestamp
返回的位置,從那裏你工作的日期和時間戳。
例如,我從印度工作,訪問位於巴黎的數據庫。在4:00 PM IST:
select sysdate,systimestamp from dual;
這將返回我巴黎的日期和時間:
結果
12-MAY-14 12-MAY-14 12.30.03.283502000 PM +02:00
select current_date,current_timestamp from dual;
這將返回我的日期印度時間:
結果
12-MAY-14 12-MAY-14 04.00.03.283520000 PM ASIA/CALCUTTA
請注意,3:30的時間差。
SYSDATE
提供服務器的日期和時間。CURRENT_DATE
提供了客戶端的日期和時間(即,您的系統)CURRENT_TIMESTAMP
提供了clinet的數據和時間戳。SYSDATE
,在安裝了數據庫服務器的systimestamp
返回日期時間。 SYSDATE
- 僅返回日期,即「yyyy-mm-dd」。 systimestamp
返回帶時間和區域的日期,即「yyyy-mm-dd hh:mm:ss:ms timezone」now()
返回執行時間語句的日期時間,即「yyyy-mm-dd hh:mm:ss 「CURRENT_DATE
- 」yyyy-mm-dd「,CURRENT_TIME
- 」hh:mm:ss「,CURRENT_TIMESTAMP
- 」yyyy-mm-dd hh:mm:ss timezone「。這些與記錄插入時間有關。注意:SYSDATE - 僅返回日期,即「yyyy-mm-dd」不正確。 SYSDATE返回數據庫服務器的系統日期,包括小時,分鐘和秒。例如:
SELECT SYSDATE FROM DUAL; 將返回類似於以下內容的輸出:12/15/2017 12:42:39 PM
請格式化您的代碼。 – RAS
+4:30表示伊朗夏令時。有伊朗,現在是夏天!爲什麼要改變我的時區? –
becasue SYSDATE返回數據庫所在系統的系統日期。返回類型是TIMESTAMP WITH TIME ZONE,CURRENT_TIMESTAMP返回會話時區中的當前日期和時間,值爲數據類型TIMESTAMP WITH TIME ZONE – Harshit