0

我是 sql 新手,需要查询帮助。

数据库是 JDEdwards 在我的数据库中,我有一列“jdt”,其中 Julian 日期存储为整数。现在我必须编写一个查询来从今天提取最近 5 天的数据。我的想法是将当前日期转换为朱利安日期为 int 然后 juliandate-5

例如:Julian date=117209 即 2017-07-28 最近 5 天日期 ie 2017-07-23 -> 117204

我也必须在单个查询中执行此操作,我无法将列添加到现有表中。而且这个查询不需要对每个日期进行概括,即如果我运行这个查询,它应该自动采用那个运行日期。

如果是,我的方法是否正确,请帮助我查询。如果有更好的方法,请就此提出建议

TIA

4

2 回答 2

1

“朱利安”日期是自特定日期以来的天数。

JDE 使用压缩日期格式,您必须将其转换为实际日期,因此您无法对 JDE 日期进行整数数学运算:所有版本的 JDE 都使用儒略日期格式,如下所示: CYYDDD 其中 C = Century;YY = 2 位数年份;和 DD = 代表一年中日期的 3 位数字

要将 JDE 日期转换为实际日期:

Declare @jdedate int;
SET @jdedate = 117209

SELECT DATEADD(DAY,(@jdedate%1000)-1, DATEADD(YEAR,(@jdedate/1000),'1900-01-01'))

要将当前日期转换为 JDE 日期:

SELECT (DATEPART(YEAR, GETDATE())-1900) * 1000 + DATEPART(dayofyear,GETDATE())
于 2018-08-17T12:23:26.670 回答
0

我看到了这个问题,并认为我可以添加一些信息。我将 Oracle 用于我们的 JDE 系统,并且我总是按以下方式转换日期:

 TO_DATE(TO_CHAR(WMTRDJ+1900000),'YYYYDDD') AS "Date - Order/Transaction Date",

本例中的列是 WMTRDJ 并将儒略日期转换为标准公历日期。

在 SELECT 中转换后,您可以在查询中使用标准日期比较。像这样(基于您的默认 NLS_DATE_FORMAT):

 WHERE TO_DATE(TO_CHAR(WMTRDJ+1900000),'YYYYDDD') BETWEEN '5-JAN-2012' AND '6-JAN-2012'

我希望这有帮助!

于 2019-01-11T21:45:10.043 回答