【发布时间】:2009-06-04 12:44:50
【问题描述】:
问题:我有一个大型数据库表(约 50 万条记录),其中包含存储在 varchar2(15) 列中的日期列表。这些日期以不同的格式存储,即。有些是 yyyy-mm-dd,有些是 mm/dd/yyyy,有些是 dd/mm/yy,有些是 mm/dd/yy,等等。即:
1994-01-13
01/13/1994
01/13/94
13/01/94
13/01/1994
etc
我需要能够稍微改变这些日期,例如为每个日期添加 30 天。 (这是对我的目标的过度简化,但这样更容易解释)。
如果所有日期的格式一致,我将按如下方式实现:
UPDATE history_table
SET some_date_col =
to_char(to_date(some_date_col, 'mm/dd/yyyy')+30, 'mm/dd/yyyy')
WHERE some_date_col IS NOT NULL;
由于数据库的大小,我无法逐个循环遍历这些值并解析日期值。任何人都可以提出一种不使用循环(即使用大量 UPDATE 语句)来完成此任务的方法吗?
【问题讨论】:
-
PS 我可以忍受不知道 2009 年 1 月 2 日是指 2009 年 1 月 2 日还是 2009 年 2 月 1 日,只要我可以确定地假设它是其中一个并将其转换为那个日期 + 30 天。
-
如果您的所有数据都来自美国,您可能可以这样做,但如果您输入的是国际数据,那么您无法轻易确定是哪一个。
标签: sql database oracle datetime plsql