【问题标题】:Query to find the last week day of every month in year using oracle sql使用oracle sql查询一年中每个月的最后一个星期几
【发布时间】:2013-06-04 13:54:17
【问题描述】:

查询应返回每个月的最后一周。例如,如果 2013 年 3 月的最后一周是星期日,则查询应显示 2013 年 3 月 29 日(星期五)。

【问题讨论】:

  • 您能发布到目前为止您尝试过的内容吗? StackOverflow 旨在帮助那些尝试过但未能解决问题的人;这不是分发家庭作业的答案。 “每个月”是什么意思? Oracle 日期的范围可以从公元前 4712 年到 9999 年 ACE,因此“每个月”可能意味着超过 176,000 个月。我可以给你这么多:查看 Oracle LAST_DAY 函数。
  • 考虑使用日历表。看看这个答案stackoverflow.com/a/5123255/472226

标签: sql oracle


【解决方案1】:

试试这个:

select dte as last_day, dayofweek_abbr as original_dayofweek, 
dte - (decode(dayofweek, 7, 1, 1, 2, 0)) as last_weekday_america
from (
    select last_day(to_date(to_char(level, '09') || '2013', 'MMYYYY')) as dte,
    to_char(last_day(to_date(to_char(level, '09') || '2013', 'MMYYYY')), 'D') as dayofweek,
    to_char(last_day(to_date(to_char(level, '09') || '2013', 'MMYYYY')), 'DAY') as dayofweek_abbr
    from dual
    connect by level <= 12
)

输出:

LAST_DAY    ORIGINAL_DAYOFWEEK  LAST_WEEKDAY_AMERICA
1/31/2013   THURSDAY    1/31/2013
2/28/2013   THURSDAY    2/28/2013
3/31/2013   SUNDAY      3/29/2013
4/30/2013   TUESDAY     4/30/2013
5/31/2013   FRIDAY      5/31/2013
6/30/2013   SUNDAY      6/28/2013
7/31/2013   WEDNESDAY   7/31/2013
8/31/2013   SATURDAY    8/30/2013
9/30/2013   MONDAY      9/30/2013
10/31/2013  THURSDAY    10/31/2013
11/30/2013  SATURDAY    11/29/2013
12/31/2013  TUESDAY     12/31/2013

请注意,如果您的 nls_territory 不同,您可能需要调整解码。

【讨论】:

    【解决方案2】:

    跟进 Ed 的提示和 tbone 的代码。以您想要的方式格式化日期。 FMDAY 格式化程序会在一周中的某一天之后删除多余的空格。

    SELECT dte AS last_day, 
           dayofweek_abbr AS original_dayofweek, 
           to_char(dte - (decode(dayofweek, 7, 1, 1, 2, 0)),'DD MON YYYY(FMDAY)') AS     last_weekday_america
    FROM (
          SELECT last_day(to_date(to_char(level, '09') || '2013', 'MMYYYY')) as dte,
                 to_char(last_day(to_date(to_char(level, '09') || '2013', 'MMYYYY')), 'D') as dayofweek,
                 to_char(last_day(to_date(to_char(level, '09') || '2013', 'MMYYYY')), 'DAY') as      dayofweek_abbr
          FROM dual
          CONNECT BY LEVEL <= 12
    )
    

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      相关资源
      最近更新 更多