转换未知的六位数日期格式,可能是 Julian 的某种变体
Converting an unknown six digit date format, possibly some variant of Julian
我最近访问了一个遗留数据库,其中所有日期都以我无法翻译的不熟悉的格式存储,我最初的研究让我认为这是 Julian 日期类型,但它似乎有点偏离?
谢天谢地,有一个日期列有一个正常的对应项,但还有很多其他日期只有六位数代码。
知道这些日期是什么,或者更重要的是,如何在这两种格式之间进行转换?
EX:
LEGACY/NORMAL
152409/2018-04-13
152413/2018-04-17
152427/2018-05-01
这是一个古老的 MS-SQL 数据库,如果相关信息与一个更古老的 COBOL 程序相关联。
可能是自 1600-12-31
以来的天数
即1-Jan-1601 = 1 等等
想查看不同年份的日期以确认
Cobol 日期函数
正如 SaggingRuffus 指出的那样。 Cobol 的许多方言都具有转换日期的函数 To/From 自 1600 年 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
我是如何得出答案的
我注意到:
- 152413 - 152409 = 4 并且 2018-04-17 是 2018-04-13 之后的 4 天
- 152427 - 152413 = 14 并且 2018-05-01 是 2018-04-17 之后的 14 天
这不是进行日期计算的问题,它给出了 1600 年 12 月 31 日。
我也知道那里的日期格式,其中日期存储为从 1600/1601 开始的天数。不同年份的日期将确认格式
添加到 Bruce Martin 的回答中:
即使是古老的 SQL 服务器支持 DATEADD/DATEDIFF,您只需使用常量 109208
(中间的日期数)将开始日期修改为 1900 年而不是 1600 年。
dateadd(day, (legacydatecol- 109208), 0) as legacy2date
datediff(day, '19000101', datecol ) + 109208 as date2legacy
我最近访问了一个遗留数据库,其中所有日期都以我无法翻译的不熟悉的格式存储,我最初的研究让我认为这是 Julian 日期类型,但它似乎有点偏离?
谢天谢地,有一个日期列有一个正常的对应项,但还有很多其他日期只有六位数代码。
知道这些日期是什么,或者更重要的是,如何在这两种格式之间进行转换?
EX:
LEGACY/NORMAL
152409/2018-04-13
152413/2018-04-17
152427/2018-05-01
这是一个古老的 MS-SQL 数据库,如果相关信息与一个更古老的 COBOL 程序相关联。
可能是自 1600-12-31
以来的天数即1-Jan-1601 = 1 等等
想查看不同年份的日期以确认
Cobol 日期函数
正如 SaggingRuffus 指出的那样。 Cobol 的许多方言都具有转换日期的函数 To/From 自 1600 年 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
我是如何得出答案的
我注意到:
- 152413 - 152409 = 4 并且 2018-04-17 是 2018-04-13 之后的 4 天
- 152427 - 152413 = 14 并且 2018-05-01 是 2018-04-17 之后的 14 天
这不是进行日期计算的问题,它给出了 1600 年 12 月 31 日。 我也知道那里的日期格式,其中日期存储为从 1600/1601 开始的天数。不同年份的日期将确认格式
添加到 Bruce Martin 的回答中:
即使是古老的 SQL 服务器支持 DATEADD/DATEDIFF,您只需使用常量 109208
(中间的日期数)将开始日期修改为 1900 年而不是 1600 年。
dateadd(day, (legacydatecol- 109208), 0) as legacy2date
datediff(day, '19000101', datecol ) + 109208 as date2legacy