【发布时间】:2017-11-14 19:14:29
【问题描述】:
我有一个暂存表,其中包含日期为字符串,格式为“mm/dd/yy”。我有 Oracle 11g 程序在加载到主表之前将字符串转换为日期格式。我正在使用to_date('03/20/34','mm/dd/rr') 转换为日期格式,该格式输出错误为 03/20/2034,而正确的日期为 03/20/1934。请帮助我获得正确的输出,其中我的表包含两个世纪的日期。
【问题讨论】:
-
默认日期转换将当前年份的前 2 位数字添加到日期格式中。如果您希望将 34 年视为 1934 而不是 2034,则必须在 34 之前附加 19。
-
你试过to_date('03/20/1934','mm/dd/rrrr') 吗?
-
@kraj,你怎么知道 34 年是 1934 年而不是 2034 年。所以应该有一些标志/机制让编译器知道它的 1934 年不是 2034 年。
-
@Debabrata “默认日期转换将当前年份的前 2 位数字添加到日期格式中” - 这不太正确。如果年份的最后两位数字介于 50 和 99 之间,则使用
RR表示年份的格式(例如,'DD-MON-RR' 的默认 nls_date_format )将(截至今天)返回 19 世纪,如果它们在 00 到 49 之间,则为 20。 -
经典 Year 2000 problem - 但我真的很惊讶它仍然在 2017 年发生。你没有发现这个错误 17 年吗?