【问题标题】:How to limit query to return only weekday values如何限制查询仅返回工作日值
【发布时间】:2015-11-18 02:06:36
【问题描述】:

我有以下查询,其中包含 2 个日期:“交易日期”和“合约到期”。我只想查看前 营业 天的交易和相应的合约到期情况。我希望能够以某种方式在 where 子句中将其拉出,但是当我尝试调用 prev_weekday 时,查询被退回。任何帮助将不胜感激。

SELECT 
    p.tradedate as current_date,
    case when to_char(p.tradedate, 'D') in (1,6,7)
         then next_day(ip.tradedate, 'Monday')
         else p.tradedate + 1 end 
                             as next_weekday,
    case when to_char(p.tradedate, 'D') in (1,2,7)
         then next_day(ip.tradedate-7, 'Friday')
         else p.tradedate - 1 end
                             as prev_weekday,
    p.tradedate,
    p.contractexpiration
FROM db.cmd h
JOIN db.stl p ON p.id = h.p_id
WHERE p.tradedate BETWEEN trunc(sysdate,'YEAR')
                      AND add_months(trunc(sysdate, 'YEAR'),12) - 1/24/60/60/

【问题讨论】:

  • 假设工作日是工作日而周末不是,编写硬编码的工作日逻辑是一个糟糕的主意。唯一安全的做法是创建一个包含可预见未来的所有日期列表的表格,并带有一个标志或值来指示该日期是否为工作日。加入表以执行涉及工作日的逻辑。
  • “当我尝试调用 prev_weekday 时,查询被退回”是什么意思?意思是?你有错误吗?
  • 我找到了一个业务逻辑表。但仍然无法仅在前一个工作日拉入。
  • 不太清楚你想要什么;您是否正在尝试获取调整后的 next_weekday 或 prev_weekday 是今天之前的最后一个工作日(来自您的逻辑表)的记录? prev/next 是否也需要从该表中工作?可能有助于编辑问题和解释规则、显示表格结构并提供一些示例数据和预期结果。

标签: sql oracle weekday


【解决方案1】:

如果您尝试使用技巧,请添加几个新字段“trade_weekday”和“expiration_weekday”,并在添加新记录时添加这些日期的日期。之后,您只需要限制工作日或放弃周末。我认为如果此查询在您的应用程序中非常重要,那么此解决方案将是改进此查询的好方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2014-12-11
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多