【问题标题】:Oracle String to Date to TimestampOracle 字符串到日期到时间戳
【发布时间】:2021-09-30 12:48:03
【问题描述】:

我有一个日期保存为1900-01-01T00:00:00.000Z 字符串格式。我正在尝试转换它,但是1900变成了2000。如何转换成时间戳而不丢失年份?

SELECT TO_TIMESTAMP(TO_CHAR(TO_DATE(SUBSTR('1900-01-01T13:00:00.000Z',0,10),'RRRR-MM-DD')),'DD/MM/RRRR HH24:MI:SSXFF') 
  FROM dual;

【问题讨论】:

  • 显示使用您的代码尝试。 (我看不懂那个小图片文字。)
  • 不要将代码发布为图片。请参阅此处了解更多详细信息原因:meta.stackoverflow.com/questions/285551

标签: sql oracle to-date to-timestamp


【解决方案1】:

你有两个问题。首先是其他受访者提到的所有不必要的额外转换。第二个,也是直接触及您发布问题的核心的一个,是在错误的世纪得到结果。这是您在 to_date/to_char/to_timestamp 函数中使用 RRRR 格式的结果。 RRRR(和 RR)是 临时 选项,可以为解决千年虫问题争取时间。他们创建了一个滑动窗口,其中世纪是根据提供的年份假设的。事实证明,使用 RR / RRRR 格式只是在 20 年后重新创建 Y2k。停止使用这些格式,始终使用 YYYY 并始终处理 4 位数年份。在 1998-1999 年间,我和数以百万计的同事花费了太多时间,只是为了看到这项工作白费了。

【讨论】:

    【解决方案2】:

    没有更多细节,一个选项(避免TZ

    SQL> alter session set nls_timestamp_format='YYYY-MM-DDHH24:MI:SS.FF3' ;
    
    Session altered.
    
    SQL> select  to_timestamp(replace(replace('1900-01-01T00:00:00.000Z','T',''),'Z',''),'RRRR-MM-DDHH24:MI:SS.FF3') from dual ;
    
    TO_TIMESTAMP(REPLACE(REPLACE('1900-01-01T00:00:00.000Z','T',''),'Z',''),'RR
    ---------------------------------------------------------------------------
    1900-01-0100:00:00.000
    

    如果你想保留它们

    SQL> select to_timestamp('1900-01-01T00:00:00.000Z','RRRR-MM-DD"T"HH24:MI:SS.FF3"Z"') from dual ;
    
    TO_TIMESTAMP('1900-01-01T00:00:00.000Z','RRRR-MM-DD"T"HH24:MI:SS.FF3"Z"')
    ---------------------------------------------------------------------------
    1900-01-0100:00:00.000
    

    【讨论】:

      【解决方案3】:

      足以使用TO_TIMESTAMP 转换以及字母TZ 的双引号,例如

      SELECT TO_TIMESTAMP('1900-01-01T13:00:00.000Z','YYYY-MM-DD"T"HH24:MI:SS.FF"Z"') AS ts
        FROM dual
      
      TS
      01/01/1900 13:00:00,000000000

      从图片中可以看出,小时部分为 13。显示样式因您当前与时间和日期相关的数据库的 NLS 设置而异

      【讨论】:

        猜你喜欢
        • 2012-10-25
        • 1970-01-01
        • 2013-07-29
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        相关资源
        最近更新 更多