oracle中的CURRENT_TIMESTAMP和SYSDATE不同

Moh*_*shi 46 oracle plsql oracle10g

在oracle 10g中执行此SQL后:

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL
Run Code Online (Sandbox Code Playgroud)

我收到这个奇怪的输出: Toad输出用于查询

造成时间差异的原因是什么?服务器时间等于SYSDATE值

Ale*_*ole 79

CURRENT_DATECURRENT_TIMESTAMP在会话时区返回当前日期和时间.

SYSDATESYSTIMESTAMP返回系统日期和时间 - 即数据库所在系统的日期和时间.

如果您的客户端会话与数据库所在的服务器不在同一时区(或者说无论如何,通过您的NLS设置),混合SYS*CURRENT_*函数将返回不同的值.它们都是正确的,它们只代表不同的东西.看起来您的服务器是(或认为是)在+4:00时区,而您的客户端会话是在+4:30时区.

如果时钟不同步,您可能还会看到时间上的微小差异,这似乎不是问题.


小智 21

SYSDATE,SYSTIMESTAMP返回数据库的日期和时间标记,而current_date,current_timestamp返回的位置,从那里你工作的日期和时间戳.

例如.我在印度工作,访问位于巴黎的数据库.下午4:00 IST:

select sysdate,systimestamp from dual;

这回报了巴黎的日期和时间:

结果

12-MAY-14   12-MAY-14 12.30.03.283502000 PM +02:00
Run Code Online (Sandbox Code Playgroud)

select current_date,current_timestamp from dual;

这让我知道印度的日期和时间:

结果

12-MAY-14   12-MAY-14 04.00.03.283520000 PM ASIA/CALCUTTA
Run Code Online (Sandbox Code Playgroud)

请注意3:30的时差.


Har*_*hit 5

SYSDATE 返回数据库所在系统的系统日期

CURRENT_TIMESTAMP 返回会话时区中的当前日期和时间,采用数据类型 TIMESTAMP WITH TIME ZONE 的值

执行这个命令

    ALTER SESSION SET TIME_ZONE = '+3:0';
Run Code Online (Sandbox Code Playgroud)

它会给你同样的结果。