【问题标题】:Get last 5 day record excluding Weekend days?获取最后 5 天的记录(不包括周末)?
【发布时间】:2018-11-23 18:23:36
【问题描述】:

我正在尝试从 Oracle SQL 上最近 5 个工作日插入的表中提取记录 我无法排除周日和周六(因为他们正在考虑)

Select * from xyz where xdate=:businessDate - 5 

这里businessDate(yyyymmdd 格式)是作为参数的值

任何指针都会受到重视和赞赏。

【问题讨论】:

  • 日期=。我不认为这可能是您正在搜索的内容
  • 对不起,我没听懂你在说什么
  • Select * from xyz where xdate=:businessDate - 5 and to_char(:businessDate,'DAY') NOT LIKE 'S%'
  • @HimanshuAhuja 感谢您的快速回答。我想强调 businessDate 的格式为 yyyymmdd 格式。这适用于您提供的解决方案吗?
  • @HimanshuAhuja 当这个程序安装在法国的 oracle 数据库中时,星期天是“dimanche”,逻辑就崩溃了?

标签: sql oracle oracle-sqldeveloper oracle12c plsqldeveloper


【解决方案1】:
SELECT * 
FROM xyz
WHERE 
  xdate >= TRUNC(SYSDATE) - 7 --last 7 days AND 
  TRUNC (xdate) - TRUNC (xdate, 'IW') NOT IN (5,6) --not sat or sun

获取过去 7 天的数据,并删除周六或周日的所有数据。

TRUNC (xdate) - TRUNC (xdate, 'IW') 返回一个介于 0 和 6 之间的值。 0 是星期一。这不受 NLS 日期设置的影响,因为它在两个 truncs 中使用相同的区域设置,因此无论您所在国家/地区的星期是从星期日还是星期一开始,计算的结果都是相同的

在任何给定的 7 天期间,您有 5 个工作日和 2 个周末

请注意,此查询假定表中没有未来日期数据。如果它确实限制了 xdate 必须小于 sysdate

【讨论】:

  • 感谢@caius jard 的宝贵建议。我很想尝试一下,让您知道它是否有效。
【解决方案2】:

我不是预言机专家,但这也可以工作

SELECT *
FROM xyz
WHERE xdate IN (:businessDate - 1, :businessDate - 2, :businessDate - 3, :businessDate - 4, :businessDate - 5, :businessDate - 6, :businessDate - 7)  AND MOD(TO_CHAR(xdate, 'J'), 7) + 1 NOT IN (6, 7);

【讨论】:

  • 感谢您的建议
【解决方案3】:

我愿意:

select * from xyz 
 where xdate >= TO_DATE( :businessDate, 'yyyymmdd' ) - 7
   and to_char( xdate, 'DAY' ) not in ( 'SAT', 'SUN' )

假设您正在使用英文数据库。这应该为您提供过去 7 天的价值,但不包括周末。

【讨论】:

  • 感谢您的建议
【解决方案4】:

您需要执行以下操作:

WITH cteData AS (SELECT TO_DATE(:BUSINESSDATE, 'YYYYMMDD') AS BUSINESS_DATE FROM DUAL)
SELECT * 
  FROM XYZ x
  CROSS JOIN cteData d
  WHERE TRUNC(x.XDATE) BETWEEN d.BUSINESS_DATE - 7
                           AND d.BUSINESS_DATE AND
        TRUNC(x.XDATE) - TRUNC(x.XDATE, 'IW') <= 4

【讨论】:

    【解决方案5】:

    在 format_date 函数中使用“DAY”格式找出周末,即周日或周六。

    IF FORMAT_DATE(Date,'DAY')='SATURDAY' then date-1
    
    IF FORMAT_DATE(Date,'DAY')='SUNDAY' then date-2
    

    你只会得到5天的记录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多