我有一个Oracle表,它有一个日期列(比如它的名字是start_date),它将日期存储为UTC日期。我有另一个列存储时区(如'America / Los_Angeles')。我的要求是我需要显示日期列,其时间戳对应于时区列中存储的时区。
我最初编写了一个接受utc_date和时区的函数,并返回如下日期:
return utc_date + (SUBSTR (TZ_OFFSET (timezone), 1, 1) || '1')
* TO_DSINTERVAL (
'0 '
|| SUBSTR (TZ_OFFSET (timezone), 2, 5)
|| ':00');
但我意识到了一个缺陷。它根据当前时间计算偏移量。所以它现在为Los_Angeles返回-00 08:00:00.000000。但是,如果存储在utc_date中的日期是强制执行日光的日期,则tz_offset值将不再有效。有人能给我一些指示,我该如何处理这个问题?
答案 0 :(得分:0)
我找到了解决问题的方法。我没有依赖TZ_OFFSET,而是决定做以下
return cast(from_tz(cast(utc_date as timestamp),'UTC') at time zone timezone as date);
这是我想要的日期。如果有人看到一个漏洞让我知道