63

在 oracle 10g 中执行此 SQL 后:

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL

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

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

4

6 回答 6

107

CURRENT_DATECURRENT_TIMESTAMP返回会话时区中的当前日期和时间。

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

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

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

于 2013-07-29T13:49:33.423 回答
24

SYSDATE,SYSTIMESTAMP返回数据库的日期和时间戳,而current_date,current_timestamp返回您工作地点的日期和时间戳。

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

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 的时差。

于 2014-05-12T10:43:40.827 回答
5

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

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

执行这个命令

    ALTER SESSION SET TIME_ZONE = '+3:0';

它将为您提供相同的结果。

于 2013-07-29T10:57:54.203 回答
2
  • SYSDATE提供服务器的日期和时间。
  • CURRENT_DATE提供客户端的日期和时间。(即您的系统)
  • CURRENT_TIMESTAMP提供客户端的数据和时间戳。
于 2016-04-07T09:24:26.407 回答
1

注意: SYSDATE - 只返回日期,即“yyyy-mm-dd”是不正确的。SYSDATE返回数据库服务器的系统日期,包括小时、分钟和秒。例如:

SELECT SYSDATE FROM DUAL; 

将返回类似于以下内容的输出:12/15/2017 12:42:39 PM

于 2017-12-15T18:57:34.107 回答
-4
  1. SYSDATEsystimestamp返回安装数据库的服务器的日期时间。SYSDATE- 仅返回日期,即“yyyy-mm-dd”。systimestamp返回带有时间和区域的日期,即“yyyy-mm-dd hh:mm:ss:ms timezone”
  2. now()返回时间语句执行时的日期时间,即“yyyy-mm-dd hh:mm:ss”
  3. CURRENT_DATE-“yyyy-mm-dd”,CURRENT_TIME-“hh:mm:ss”,CURRENT_TIMESTAMP-“yyyy-mm-dd hh:mm:ss 时区”。这些与记录插入时间有关。
于 2017-06-07T11:02:26.770 回答