在oracle 10g中执行此SQL之后:
SELECT SYSDATE, CURRENT_TIMESTAMP FROM DUAL
我收到这个奇怪的输出:
时间差异的原因是什么? 服务器时间等于SYSDATE值
答案 0 :(得分:70)
CURRENT_DATE
和CURRENT_TIMESTAMP
会在会话时区返回当前日期和时间。
SYSDATE
和SYSTIMESTAMP
返回系统日期和时间 - 即数据库所在系统的日期和时间。
如果您的客户端会话与数据库所在的服务器位于同一时区(或者说无论如何都是通过您的NLS设置),请混合SYS*
和{{ 1}}函数将返回不同的值。它们都是正确的,它们只代表不同的东西。看起来您的服务器是(或认为是)在+4:00时区,而您的客户端会话时间为+4:30。
如果时钟没有同步,你可能也会发现时间差异很小,这似乎不是问题。
答案 1 :(得分:17)
SYSDATE
,SYSTIMESTAMP
返回数据库的日期和时间戳,而current_date
,current_timestamp
返回您工作地点的日期和时间戳。
例如。我在印度工作,访问位于巴黎的数据库。下午4:00 IST:
select sysdate,systimestamp from dual;
这给我回复了巴黎的日期和时间:
RESULT
12-MAY-14 12-MAY-14 12.30.03.283502000 PM +02:00
select current_date,current_timestamp from dual;
这给我回复了印度的日期和时间:
RESULT
12-MAY-14 12-MAY-14 04.00.03.283520000 PM ASIA/CALCUTTA
请注意3:30的时差。
答案 2 :(得分:3)
SYSDATE返回数据库所在系统的系统日期
CURRENT_TIMESTAMP在会话时区中返回当前日期和时间,其值为数据类型TIMESTAMP WITH TIME ZONE
执行此命令
ALTER SESSION SET TIME_ZONE = '+3:0';
它将为您提供相同的结果。
答案 3 :(得分:1)
SYSDATE
提供服务器的日期和时间。CURRENT_DATE
提供客户的日期和时间(即您的系统)CURRENT_TIMESTAMP
提供clinet的数据和时间戳。答案 4 :(得分:0)
注意:SYSDATE - 仅返回日期,即" yyyy-mm-dd"是不正确的。 SYSDATE返回数据库服务器的系统日期,包括小时,分钟和秒。例如:
SELECT SYSDATE FROM DUAL; 将返回类似于以下内容的输出:12/15/2017 12:42:39 PM
答案 5 :(得分:-2)
SYSDATE
,systimestamp
返回安装数据库的服务器的日期时间。 SYSDATE
- 仅返回日期,即" yyyy-mm-dd"。 systimestamp
返回带有时间和区域的日期,即" yyyy-mm-dd hh:mm:ss:ms timezone" now()
在执行时间语句时返回datetime,即" yyyy-mm-dd hh:mm:ss" CURRENT_DATE
- " yyyy-mm-dd",CURRENT_TIME
- " hh:mm:ss",CURRENT_TIMESTAMP
- &#34 ; yyyy-mm-dd hh:mm:ss timezone"。这些与记录插入时间有关。