【问题标题】:Different CURRENT_TIMESTAMP and SYSDATE in oracleoracle中不同的CURRENT_TIMESTAMP和SYSDATE
【发布时间】:2013-07-29 03:05:48
【问题描述】:

在 oracle 10g 中执行此 SQL 后:

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL

我收到这个奇怪的输出:

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

【问题讨论】:

    标签: sql oracle plsql oracle10g


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我正在使用 CURRENT_TIMESTAMP 进行插入。应用程序和数据库在新加坡和印度的客户端浏览器中运行。当通过应用程序[浏览器]插入时,它仅在马来西亚时间插入
      【解决方案3】:

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

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

      执行此命令

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

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

      【讨论】:

      • +4:30 表示伊朗夏令时间。有伊朗,现在是夏天!为什么我要改变我的时区?!
      • 因为 SYSDATE 返回数据库所在系统的系统日期。返回类型为 TIMESTAMP WITH TIME ZONE,CURRENT_TIMESTAMP 返回会话时区中的当前日期和时间,数据类型为 TIMESTAMP WITH TIME ZONE
      【解决方案4】:
      • SYSDATE 提供服务器的日期和时间。
      • CURRENT_DATE 提供客户端的日期和时间。(即您的系统)
      • CURRENT_TIMESTAMP 提供客户端的数据和时间戳。

      【讨论】:

        【解决方案5】:

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

        SELECT SYSDATE FROM DUAL; 
        

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

        【讨论】:

          【解决方案6】:
          1. SYSDATE, systimestamp 返回安装数据库的服务器的日期时间。 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 时区”。这些与记录插入时间有关。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-03
            • 2022-01-16
            • 1970-01-01
            • 2012-11-03
            • 1970-01-01
            • 2020-08-14
            • 1970-01-01
            • 2017-03-01
            相关资源
            最近更新 更多