gpt4 book ai didi

sql - JD Edwards/IBM iSeries DB2 Julian Date/Calendar Date SQL 转换

转载 作者:行者123 更新时间:2023-12-04 16:41:59 26 4
gpt4 key购买 nike

仍有许多上个世纪的遗留应用程序在 IBM iSeries 上运行。例如JD爱德华兹。日期字段通常以多种格式统一存储,通常称为 Julian Date。这些格式是年和年中日期的组合,更准确地称为 Ordinal Date 今天。

JD Edwards ERP 应用程序数据库中广泛使用的特定儒略日期格式是一种 6 位格式 (YYYDDD),其中包含 3 位年份(表示为自 1900 年以来的年数)和 3一年中的第几天的数字(带前导零)。 enter image description here在 SQL 中使用清晰简洁的方法在这两种格式之间进行转换非常有帮助。

这是 IBM 为 Converting Julian Dates to Calendar Dates 提供的解决方案:

Select date (days(concat(cast(integer(1900000+"SDIVD") /1000 as Char(4)),'-01-01'))+mod(integer(1900000+" SDIVD"),1000)-1)

哎呀。我的头好痛……

我希望有一种更简单、更容易的方法来仅使用 IBM iSeries DB2 SQL 语法来转换这两种方式?

最佳答案

我不确定你用什么来显示数据,但是限制

dates inclusively between 1940 and 2039

与您的 session 设置相关联,不应返回 NULL,而是通常由“++++++++”表示的计算错误。空值通常表示为单个破折号“-”。如果您将 session 设置更改为以 ISO 格式而不是 MDY 格式显示日期,则超出范围的日期应该可以正常显示。关于 String representations of datetime values 的相关 IBM 文章.我不知道为什么这个设置甚至会影响像 DAYOFYEAR 这样的标量函数,但它确实会影响。 (编辑:在向 IBM 提交错误报告后,他们发布了 PTF 来解决 DAYOFYEAR SI77129 (7.3) 和 SI77130 (7.4) 的这一特定问题)

我能跑

SELECT DATE(CHAR(140001 + 1900000)) FROM sysibm.sysdummy1;

得到

2040-01-01

为了从 date 转换为 long julian 然后转换为您的序号日期,我找到了一个较短的版本:

SELECT INT(TO_CHAR('2019-10-18','YYYYDDD'))-1900000 FROM sysibm.sysdummy1;

关于sql - JD Edwards/IBM iSeries DB2 Julian Date/Calendar Date SQL 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com