要获取日期以julian格式存储为int格式时最近5天的数据,

时间:2018-08-16 16:27:19

标签: tsql date-conversion julian-date jdedwards

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

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

例如:朱利安日期= 117209,即2017-07-28 最近5天,即2017年7月23日-> 117204

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

如果可以,我的方法是否正确,请帮助我进行查询。 如果有更好的方法,请对此提供建议

TIA

2 个答案:

答案 0 :(得分:1)

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

JDE使用压缩的日期格式,您必须将其转换为实际日期,因此无法对JDE日期进行整数运算: JDE的所有版本均使用儒略日期格式,如下所示:CYYDDD其中C =世纪; 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())

答案 1 :(得分: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'

我希望这会有所帮助!