我想我看到一个查询,显示哪些列是utc,哪些列不是,但查询逃脱了我,我似乎无法在线找到...下面是我尝试过的,提前谢谢。
select * from all_tab_columns
where data_type like '%TIME%'
答案 0 :(得分:2)
Oracle提供了两种处理时区的数据类型:
TIMESTAMP WITH TIME ZONE
和TIMESTAMP WITH LOCAL TIME ZONE
但是,这些只是处理时区的数据类型,并不意味着存储的值是UTC时间。一般来说,它们可以是任何时区,但如果需要,您可以将它们转换为UTC。
您的查询将是
select *
from all_tab_columns
where data_type like 'TIMESTAMP(%) WITH% TIME ZONE';
有关您评论的附录:
在TIMESTAMP
或DATE
列上您没有时区,因此您无法查询任何内容。
在TIMESTAMP WITH LOCAL TIME ZONE
上SESSIONTIMEZONE
时间总是并且内部存储在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)