根据月份中的某天返回日期范围

Posted

技术标签:

【中文标题】根据月份中的某天返回日期范围【英文标题】:Returning a Date Range based on Day of the Month 【发布时间】:2017-06-05 18:57:32 【问题描述】:
Select * 
From Orders

WHERE   (
        extract(day from sysdate)<=21          
        and 
        to_date(SCHEDULEDATE , 'yyyy/mm/dd') between 
        to_date((to_char(sysdate, 'YYYY')||'/'||cast((extract(month from sysdate)-1)as char)||'/22'),'yyyy/mm/dd') and to_date((to_char(sysdate,'YYYY')||'/'||cast((extract(month from sysdate))as char)||'/21'),'yyyy/mm/dd')
       )
      or
      (

       extract(day from sysdate)>21 
       and 
       to_date(SCHEDULEDATE , 'yyyy/mm/dd') between 
       to_date((to_char(sysdate, 'YYYY')||'/'||cast((extract(month from sysdate))as char)||'/22'),'yyyy/mm/dd') and to_date((to_char(sysdate, 'YYYY')||'/'||cast((extract(month from sysdate)+1)as char)||'/21'),'yyyy/mm/dd')
    )

我正在尝试找出一种简单的方法来根据月份中的某天返回一组日期范围。如果一个月中的某天小于或等于我希望它返回所有订单,则计划日期在前一个月的 22 日和当月的 21 日之间。如果月份的日期大于 21,我希望它返回所有具有当月计划日期的订单,直到月底。我试图在没有运气的地方使用一个案例。我现在所拥有的似乎也不起作用。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我认为这是你想要的:

WHERE (extract(day from sysdate) <= 21 and  
       scheduledate >= add_months(trunc(sysdate, 'MON'), -1) + 21 and  
       scheduledate < trunc(sysdate, 'MON') + 21
      ) or
      (extract(day from sysdate) > 21 and
       trunc(scheduledate, 'MON') = trunc(sysdate, 'MON')
      )  

【讨论】:

感谢 Gordon,我想在 where 语句之后添加一个条件,但它似乎忽略了它,示例和状态 'Canceled' 我需要将它包含在 where 的某个地方吗? 我想通了,只是需要额外的一组括号。

以上是关于根据月份中的某天返回日期范围的主要内容,如果未能解决你的问题,请参考以下文章

C# 日期时间格式化

JavaScript中的Date对象

学习笔记:javascript内置对象:日期对象

DateTime 时间格式

yyyy-MM-dd HH:mm:ss

java中Date