我最近访问了一个遗留数据库,其中所有日期都以不熟悉的格式存储,我无法翻译,我的初步研究让我觉得这是朱利安日期类型,但似乎有点过时了?
值得庆幸的是,有一个日期列与其正常对应,但还有很多其他日期只存在六位数代码。
了解这些日期是什么,或者更重要的是,如何在这两种格式之间进行转换?
EX:
LEGACY/NORMAL
152409/2018-04-13
152413/2018-04-17
152427/2018-05-01
它是一个古老的MS-SQL数据库,如果有相关信息,则与更古老的COBOL程序相关联。
答案 0 :(得分:8)
可能是 1600-12-31
以来的天数即。 1601年1月1日 = 1等。
希望查看其他年份的日期以确认
SaggingRuffus指出。 Cobol的许多方言都具有将日期转换为自2003年12月31日以来的天的功能 这些功能包括:
INTEGER-OF-DATE converts YYYYMMDD date to Days-since 31-12-1600
INTEGER-OF-DAY converts YYYYDDD date to Days-since 31-12-1600
DATE-TO-INTEGER converts Days since 31-12-1600 to YYYMMDD
DAY-OF-INTEGER converts Days since 31-12-1600 to YYYDDD
我注意到了:
这不是一个日期计算的问题,它给出了31-dec-1600。 我也知道存储日期的日期格式是从1600/1601开始的天数。不同年份的日期将确认格式
答案 1 :(得分:2)
加入布鲁斯·马丁的回答:
即使是古老的SQL Server支持DATEADD / DATEDIFF,您只需使用常量109208
(中间的日期数)将开始日期修改为1900而不是1600。
dateadd(day, (legacydatecol- 109208), 0) as legacy2date
datediff(day, '19000101', datecol ) + 109208 as date2legacy