【问题标题】:To get data for the last 5 days when date is stored as int in julian format当日期以朱利安格式存储为 int 时,获取最近 5 天的数据
【发布时间】:2019-01-23 16:21:16
【问题描述】:

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

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

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

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

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

TIA

【问题讨论】:

    标签: tsql date-conversion julian-date jdedwards


    【解决方案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())
    

    【讨论】:

    • 在 JDEdwards 中使用 getdate() 时出错 错误:[SQL0204] *LIBL 类型 *N 中的 GETDATE 未找到。 SQLState:42704 错误代码:-204
    • 感谢 Tom 的转换查询。但我可以知道如何根据朱利安日期列从表中选择过去 5 天的数据
    • 我必须在 JDEdwards 系统上编写此查询。以下查询工作选择 CAST(CASE WHEN SUBSTRING(TO_CHAR(current_timestamp, 'yyyy'), 1, 1) = '2' THEN '1' ELSE '0' END || TO_CHAR(current_timestamp, 'yyddd') AS INT)。
    • 但是我怎样才能只检索过去 5 天的数据,而这项工作每 3 天发生一次。该查询应该在 JDE 系统上编写,并且似乎大多数日期参数似乎不起作用。请就此提出建议,因为我提交此 TIA 的截止日期即将到来
    【解决方案2】:

    我看到了这个问题,并认为我可以添加一些信息。我将 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'
    

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多