Oracle 使用确定时区的位置更新时间戳值

Oracle 使用确定时区的位置更新时间戳值,oracle,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 该列

开发人员向我的数据库写入了时区格式不正确的数据。它的名称不是小时偏移量,如下所示:

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
该列的类型为带时区的时间戳(0)。另一个第三方应用程序正在崩溃读取这些记录,因为它显然没有编码来处理长格式时区

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

UPDATE <<your table>>    
SET <<your timestamp column>> = <<your timestamp column>> AT TIME ZONE 'UTC'
更新
设置=时区“UTC”
问题是我有500K+条记录,当只涉及几百行时,我不想更新整个表(因为更新后会发生复制)。如何使用
WHERE
子句仅获取存储了不适当时区数据的行?我已经通读了一遍,没有找到一个示例显示按时区格式过滤结果


谢谢你的帮助

我没有要测试的数据,但请尝试以下方法:

where extract(timezone_region from date_column) <> 'UNKNOWN'
where extract(从日期列提取时区区域)'UNKNOWN'

我认为当您使用此函数时,它只返回数值(而不是区域),它会返回“未知”

我没有要测试的数据,但请尝试以下方法:

where extract(timezone_region from date_column) <> 'UNKNOWN'
where extract(从日期列提取时区区域)'UNKNOWN'

我认为,当您使用此函数时,它只有数值(而不是区域),它会返回“未知”

存储该值的columne是什么类型?它是VARCHAR2吗?为什么你认为“美国/ NeXYYK”是错误的?它是带时区的时间戳(0)。我将编辑问题以添加此内容。@WernfriedDomscheit另一个访问数据的应用程序试图读取这些行时崩溃,因为它没有正确处理
美国/纽约
-05:00
。我无法控制该应用程序的开发,因此更正这是我唯一的途径。是否要始终更新到UTC或+04:00?columne是什么类型的,您将其存储在哪里?它是VARCHAR2吗?为什么你认为“美国/ NeXYYK”是错误的?它是带时区的时间戳(0)。我将编辑问题以添加此内容。@WernfriedDomscheit另一个访问数据的应用程序试图读取这些行时崩溃,因为它没有正确处理
美国/纽约
-05:00
。我无法控制该应用程序的开发,因此更正这是我唯一的途径。是否要始终更新到UTC或+04:00?