目前的安排是: SAP DSO:包含 dd-mm-yyyy 形式的数据列。
BODS 作业从 DSO 获取数据并加载到登陆表。Teradata 中对应的日期列是 dd-mm-yy。
将日期加载到 teradata 时,2014 年将转换为 1914。不涉及任何转换。源和目标之间的直接映射。
这个问题在几个月前才开始发生。不确定要检查什么。
目前的安排是: SAP DSO:包含 dd-mm-yyyy 形式的数据列。
BODS 作业从 DSO 获取数据并加载到登陆表。Teradata 中对应的日期列是 dd-mm-yy。
将日期加载到 teradata 时,2014 年将转换为 1914。不涉及任何转换。源和目标之间的直接映射。
这个问题在几个月前才开始发生。不确定要检查什么。
要在日期中显示正确的年份,请使用 DateTime 格式dd-mm-rrrr
。
当日期存储在一个世纪但引用另一个世纪时,日期可能会以错误的前缀显示。rrrr
年份格式是这样工作的;
如果指定的两位数年份是 00 到 49,则
如果当前年份的后两位数字是 00 到 49,则返回的年份与当前年份的前两位数字相同。
如果当前年份的后两位是 50 到 99,则返回年份的前 2 位比当前年份的前 2 位大 1。
如果指定的两位数年份是 50 到 99,则
如果当前年份的后两位为 00 到 49,则返回年份的前 2 位比当前年份的前 2 位小 1。
如果当前年份的后两位数字是 50 到 99,则返回的年份与当前年份的前两位数字相同。
我在 BOXI 3.1 和 Oracle 中遇到了类似的问题。
在创建了许多具有 DateTime 格式的日期字段的表dd/mm/yyyy
并构建了一个具有这种格式的 Universe 之后,我注意到在测试中某些日期结果显示不正确,例如01/07/1993
显示为01/07/2093
。这是由于加载到表中的数据只有 2yy
位数字,例如01/07/93
Oracle 期望使用 4 位数字的 DateTime 格式yyyy
。
反过来,Oracle 将年份格式强制为 4 位数字,但由于年份是上个世纪(20 世纪)但存储在 21 世纪,因此错误的世纪前缀在年份上。
为了解决这个问题,我使用了rrrr
当年的 DateTime 格式。Oracle 在此链接上的完整解释,进一步的解释可以在这里找到。
当我使用 DateTime 格式重新创建表格时dd-mm-rrrr
,日期显示正确。
我希望这有帮助。
CenturyBreak 的 DBSControl 指定哪些两位数年份被解释为 20 世纪,哪些被解释为 21 世纪。如果您的系统将此配置为非零值,这是默认值,那么这很可能是您看到数据行为的原因。
CenturyBreak 不影响以数字形式输入的四位数年份或日期。
如果 CenturyBreak=10,则诸如“00/01/01”和“09/01/01”之类的字符串被解释为 2000 和 2009。插入为“14/01/01”的字符串被解释为 1914。
请咨询您的 DBA 以确定 CenturyBreak 是否已设置为非零值或将您的数据输入显式转换为数字日期值。