代码之家  ›  专栏  ›  技术社区  ›  buræquete Naveen Kocherla

Oracle中的“timestamp with time zone”类型保留时区格式

  •  1
  • buræquete Naveen Kocherla  · 技术社区  · 6 年前

    Timestamp with Time Zone oracle中的数据类型有一个奇怪的特性,当我们在没有任何格式的情况下选择它时,它保留了时区的插入格式;

    1. TZR

      UPDATE X SET COLUMN_A = TO_TIMESTAMP_TZ('19-JUL-18 01.53.16.381566000 PM UTC', 
                                              'DD-MON-RR HH.MI.SSXFF AM TZR') ...
      

      如果我直接选择这个栏目;

      > SELECT COLUMN_A WHERE ...
      19-JUL-18 01.53.16.381566000 PM UTC
      
    2. TZH:TZM

      UPDATE X SET COLUMN_A = TO_TIMESTAMP_TZ('19-JUL-18 01.53.16.381566000 PM +00:00', 
                                              'DD-MON-RR HH.MI.SSXFF AM TZH:TZM') ...
      

      如果我直接选择这个栏目;

      > SELECT COLUMN_A WHERE ...
      19-JUL-18 01.53.16.381566000 PM +00:00
      

    这个特性背后的原因是什么?有没有一种方法可以控制这个特性,我可以将所有这些值设置为 TZH:坦桑尼亚先令 例如格式化。我不是说具体的会议 NLS_TIMESTAMP_TZ_FORMAT ,尽管它对 SELECT 案例

    2 回复  |  直到 6 年前
        1
  •  1
  •   Wernfried Domscheit    6 年前

    时区 UTC 与时区不同 +00:00 . 你只需要得到你之前插入的内容。

    也许当我说“时区”时答案更清楚 Europe/Zurich 与时区不同 +02:00 “目前两者都比UTC提前2小时,以这种方式它们是相等的。不过,在冬季,这种情况会有所改变。

    也不是 协调世界时 也不是 +00:00 应用夏令时,所以差异不是很明显,但在内部是不同的。

        2
  •  1
  •   buræquete Naveen Kocherla    6 年前

    enter image description here

    我有你的问题,但我仍然认为这取决于工具在我的toad中,以下测试用例返回相同的结果:

    create table test_a(
      id        number,
      column_a timestamp with time zone
    )
    ;
    
    insert into test_a(id) values(1);
    insert into test_a(id) values(2);
    
    update test_a
    SET COLUMN_A = TO_TIMESTAMP_TZ('19-JUL-18 01.53.16.381566000 PM UTC', 
                                       'DD-MON-RR HH.MI.SSXFF AM TZR') 
    where id = 1;                                   
    
    update test_a
     SET COLUMN_A = TO_TIMESTAMP_TZ('19-JUL-18 01.53.16.381566000 PM +00:00', 
                                       'DD-MON-RR HH.MI.SSXFF AM TZH:TZM') 
    where id = 2;                                   
    
    
    select * from test_a;
            ID COLUMN_A                           
    ---------- -----------------------------------
    COLUMN_B                           
    -----------------------------------
             1 2018-07-19 13:53:16.381566 +00:00  
    
    
             2 2018-07-19 13:53:16.381566 +00:00  
    
    
    
    2 rows selected.