使用WHERE更新TIMESTAMP值以确定时区

时间:2016-11-21 14:59:54

标签: oracle

开发人员已将数据写入数据库,该数据库的时区格式不正确。它没有一个小时的偏移量,而是具有如下所示的名称:

18-NOV-16 12.17.41.000000000 PM -05:00
18-NOV-16 12.17.05.000000000 PM -05:00
18-NOV-16 12.16.07.000000000 PM AMERICA/NEW_YORK
18-NOV-16 12.12.54.000000000 PM -05:00
18-NOV-16 12.12.33.000000000 PM -05:00

相关列的类型为TIMESTAMP(0) WITH TIMEZONE。另一个第三方应用程序正在崩溃读取这些记录,因为它显然没有编码来处理长格式时区。

在这里研究,我找到了正确的更新查询来纠正这个问题:

UPDATE <<your table>>    
SET <<your timestamp column>> = <<your timestamp column>> AT TIME ZONE 'UTC'

问题是我有500K +记录,并且当只涉及几百行时(由于更新后发生的复制),不想更新整个表。如何使用WHERE子句仅获取使用不合适的时区数据存储的行?我已经全部阅读,无法找到按时区格式显示过滤结果的示例。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我没有测试数据,但试试这个:

where extract(timezone_region from date_column) <> 'UNKNOWN'

我认为当你使用这个功能时,它只有数字值(不是区域),它会返回'UNKNOWN'