"Timestamp with Time Zone" Oracle 中的类型保留时区格式
"Timestamp with Time Zone" type in Oracle retains timezone format
Oracle 中的 Timestamp with Time Zone 数据类型有一个奇怪的特性,当我们 select 它没有任何格式时,它保留插入时区的格式;
和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这一栏;
> SELECT COLUMN_A WHERE ...
19-JUL-18 01.53.16.381566000 PM UTC
和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这一栏;
> SELECT COLUMN_A WHERE ...
19-JUL-18 01.53.16.381566000 PM +00:00
此功能背后的原因是什么,有没有办法控制它,例如,我可以将所有这些值设置为 TZH:TZM
格式。我不是在谈论特定会话 NLS_TIMESTAMP_TZ_FORMAT
,尽管它对 SELECT
个案例
非常有用
我遇到了你的问题,但我仍然认为这取决于工具。在我的蟾蜍下面的测试用例中 returns 相同的结果:
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.
时区 UTC
与时区 +00:00
不同。你只是得到你之前插入的东西。
也许当我说时答案更清楚:"Time zone Europe/Zurich
is different to time zone +02:00
." 目前两者都比 UTC 早 2 小时,在这种情况下它们是相等的。然而在冬季,这将会改变。
UTC
和 +00:00
都不应用夏令时,所以区别不是很明显,但在内部它们是不同的。
Timestamp with Time Zone 数据类型有一个奇怪的特性,当我们 select 它没有任何格式时,它保留插入时区的格式;
和
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这一栏;
> SELECT COLUMN_A WHERE ... 19-JUL-18 01.53.16.381566000 PM UTC
和
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这一栏;
> SELECT COLUMN_A WHERE ... 19-JUL-18 01.53.16.381566000 PM +00:00
此功能背后的原因是什么,有没有办法控制它,例如,我可以将所有这些值设置为 TZH:TZM
格式。我不是在谈论特定会话 NLS_TIMESTAMP_TZ_FORMAT
,尽管它对 SELECT
个案例
我遇到了你的问题,但我仍然认为这取决于工具。在我的蟾蜍下面的测试用例中 returns 相同的结果:
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.
时区 UTC
与时区 +00:00
不同。你只是得到你之前插入的东西。
也许当我说时答案更清楚:"Time zone Europe/Zurich
is different to time zone +02:00
." 目前两者都比 UTC 早 2 小时,在这种情况下它们是相等的。然而在冬季,这将会改变。
UTC
和 +00:00
都不应用夏令时,所以区别不是很明显,但在内部它们是不同的。