oracle中的CURRENT_TIMESTAMP和SYSDATE不同

时间:2013-07-29 10:51:02

标签: oracle plsql oracle10g

在oracle 10g中执行此SQL之后:

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL

我收到这个奇怪的输出: Toad output for query

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

6 个答案:

答案 0 :(得分:70)

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

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

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

如果时钟没有同步,你可能也会发现时间差异很小,这似乎不是问题。

答案 1 :(得分:17)

SYSDATESYSTIMESTAMP返回数据库的日期和时间戳,而current_datecurrent_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)

  1. SYSDATEsystimestamp返回安装数据库的服务器的日期时间。 SYSDATE - 仅返回日期,即" yyyy-mm-dd"。 systimestamp返回带有时间和区域的日期,即" yyyy-mm-dd hh:mm:ss:ms timezone"
  2. now()在执行时间语句时返回datetime,即" yyyy-mm-dd hh:mm:ss"
  3. CURRENT_DATE - " yyyy-mm-dd",CURRENT_TIME - " hh:mm:ss",CURRENT_TIMESTAMP - &#34 ; yyyy-mm-dd hh:mm:ss timezone"。这些与记录插入时间有关。