sql to_char - 基于日期条件的格式

时间:2018-01-10 20:13:29

标签: sql oracle date to-char

这是针对过去十二个月的月度报告,例如:于2018年1月生产,以查看2016年12月至2017年12月。

我需要生成一个案例/何时根据条件格式化日期 - 如果{prod_date}是数据集中的最后一个月,则格式为周末日期(12/2 2017/9/12/9/17) ,12 / 16/2017,等等 - yyyyddmm)。但是,如果日期早于上个月,则格式为'yyyymm'。

最终结果组应为:

20170212
20170912
20171612
20172312
20173012
201711
201710
201709
...
201612

1 个答案:

答案 0 :(得分:0)

这就是我理解您的要求的方式:

  1. 除了最后一个月之外,您希望按yyyymm分组所有月份。
  2. 您想在上个月按yyyyddmm分组,其中dd应为周末(星期六)。
  3. 使用CASE表达式检查月份。截断到ISO周以获得一周的星期一。到星期六再加五天。按计算日期字符串分组并聚合您想要的任何值。 E.g:

    select
      grp,
      max(value1) as max_value1,
      sum(value2) as sum_value2
    from
    (
      select
        case when to_char(dt, 'yyyymm') = (select to_char(max(dt), 'yyyymm') from mytable)
          then to_char(trunc(dt, 'iw') + 5, 'yyyyddmm')
          else to_char(dt, 'yyyymm')
        end as grp,
        value1,
        value2
      from mytable
    )
    group by grp
    order by grp desc;