如何查看数据库中的哪些时间戳列是UTC时间戳,哪些列不在Oracle中

时间:2018-03-23 15:41:46

标签: sql oracle

我想我看到一个查询,显示哪些列是utc,哪些列不是,但查询逃脱了我,我似乎无法在线找到...下面是我尝试过的,提前谢谢。

select * from all_tab_columns
where data_type like '%TIME%'

1 个答案:

答案 0 :(得分:2)

Oracle提供了两种处理时区的数据类型:

TIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE

但是,这些只是处理时区的数据类型,并不意味着存储的值是UTC时间。一般来说,它们可以是任何时区,但如果需要,您可以将它们转换为UTC。

您的查询将是

select * 
from all_tab_columns
where data_type like 'TIMESTAMP(%) WITH% TIME ZONE';

有关您评论的附录:

TIMESTAMPDATE列上您没有时区,因此您无法查询任何内容。

TIMESTAMP WITH LOCAL TIME ZONESESSIONTIMEZONE时间总是并且内部存储在DBTIMEZONE,因此查询没有任何意义。

TIMESTAMP WITH TIME ZONE上,您可以运行查询:

select timestamp_tz_column
from your_table
where TO_CHAR(timestamp_tz_column, 'TZR') in ('UTC', 'GMT', '+00:00');
-- or 
where EXTRACT(TIMEZONE_REGION FROM timestamp_tz_column) in ('UTC', 'GMT', '+00:00');
-- or 
where EXTRACT(TIMEZONE_HOUR FROM timestamp_tz_column) = 0 
  AND EXTRACT(TIMEZONE_MINUTE FROM timestamp_tz_column) = 0;

但实际上这个查询也没用,因为您可以转换timestamp_tz_column AT TIME ZONE 'UTC'SYS_EXTRACT_UTC(timestamp_tz_column)

之类的值