oracle中的CURRENT_TIMESTAMP和SYSDATE不同

问题描述 投票:0回答:7

在oracle 10g中执行此SQL后:

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL

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

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

sql oracle plsql oracle10g
7个回答
129
投票

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

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

如果您的客户端会话与数据库所在的服务器不在同一时区(或者通过您的 NLS 设置说无论如何都不是),则混合

SYS*
CURRENT_*
函数将返回不同的值。它们都是正确的,只是代表不同的东西。看起来您的服务器(或认为是)位于 +4:00 时区,而您的客户端会话位于 +4:30 时区。

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


29
投票

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

例如。我在印度工作,访问位于巴黎的数据库。美国标准时间下午 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时差。


5
投票

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

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

执行此命令

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

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


2
投票
  • SYSDATE
    提供服务器的日期和时间。
  • CURRENT_DATE
    提供客户的日期和时间。(即您的系统)
  • CURRENT_TIMESTAMP
    提供客户端的数据和时间戳。

1
投票

注意:

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

SELECT SYSDATE FROM DUAL; 

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


0
投票

如何将 sysdate 设置为 current_timestamp,在我的例子中,current_timestamp 是正确的,sysdate 落后于 12 小时。


-5
投票
  1. SYSDATE
    ,
    systimestamp
    返回安装数据库的服务器的日期时间。
    SYSDATE
    - 仅返回日期,即“yyyy-mm-dd”。
    systimestamp
    返回带有时间和时区的日期,即“yyyy-mm-dd hh:mm:ss:ms 时区”
  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 时区”。这些与记录插入时间有关。
© www.soinside.com 2019 - 2024. All rights reserved.