【问题标题】:If Sunday then show Week rest else present in oracle reports如果是星期天,则在 oracle 报告中显示星期休息。
【发布时间】:2021-02-18 18:59:37
【问题描述】:

嗨,亲爱的,我正在处理 oracle 报告我有一个专栏 ATT_DATE,其中包含下个月的日期我有:Day 我创建这样的函数,这给了我一天

begin
  RETURN TO_CHAR(:ATT_DATE, 'DAY');
end;

它给了我出现在 :ATT_DATE 中的日期 现在我想再做一个检查 SUNDAY 的功能,然后给我两个这样的东西,比如 if Sunday than Weekly Rest else Present in :Status column我写了这段代码

function M_DAY2Formula return CHAR is
begin
  IF TO_CHAR(:ATT_DATE, 'DAY') = 'SUNDAY' THEN
     RETURN 'WEEK REST';
  ELSE
     RETURN 'PRESENT';
  END IF;
end;

但它从来没有在所有的日子里都需要星期天

【问题讨论】:

    标签: oracle oracle11g oraclereports


    【解决方案1】:

    我相信是关于TRIM。请参阅以下示例:

    SQL> with dates as
      2    (select trunc(sysdate, 'iw') + level - 1 datum
      3     from dual
      4     connect by level <= 10
      5    )
      6  select datum,
      7         to_char(datum, 'DAY') dan,
      8         to_char(datum, 'DAY', 'nls_date_language = english') dan2,
      9         --
     10         length(to_char(datum, 'DAY', 'nls_date_language = english')) len_dan2,
     11         --
     12         case when to_char(datum, 'DAY', 'nls_date_language = english') = 'SUNDAY' then 'Week rest'
     13              else 'Present'
     14         end status,
     15         --
     16         case when trim(to_char(datum, 'DAY', 'nls_date_language = english')) = 'SUNDAY' then 'Week rest'
     17              else 'Present'
     18         end status2
     19  from dates
     20  order by datum;
    
    DATUM      DAN         DAN2        LEN_DAN2 STATUS    STATUS2
    ---------- ----------- --------- ---------- --------- ---------
    15.02.2021 PONEDJELJAK MONDAY             9 Present   Present
    16.02.2021 UTORAK      TUESDAY            9 Present   Present
    17.02.2021 SRIJEDA     WEDNESDAY          9 Present   Present
    18.02.2021 ČETVRTAK    THURSDAY           9 Present   Present
    19.02.2021 PETAK       FRIDAY             9 Present   Present
    20.02.2021 SUBOTA      SATURDAY           9 Present   Present
    21.02.2021 NEDJELJA    SUNDAY             9 Present   Week rest
    22.02.2021 PONEDJELJAK MONDAY             9 Present   Present
    23.02.2021 UTORAK      TUESDAY            9 Present   Present
    24.02.2021 SRIJEDA     WEDNESDAY          9 Present   Present
    
    10 rows selected.
    
    SQL>
    

    换句话说:

    • 如果您的日期语言不是英语,则无法将其与“SUNDAY”进行比较(在我的示例中为 dan
    • 如果语言没有问题,为什么第一个casestatus 列)不能正常工作?因为 长度 - 看到了吗?不管是哪一天,长度都是9
    • 因此,trimDAY 值,然后它按预期工作

    或者,在报表生成器中:

    function M_DAY2Formula return CHAR is
    begin
      IF trim(TO_CHAR(:ATT_DATE, 'DAY')) = 'SUNDAY' THEN     --> TRIM, here
         RETURN 'WEEK REST';
      ELSE
         RETURN 'PRESENT';
      END IF;
    end;
    

    【讨论】:

    • 用 sql 写就可以了,怎么写报表函数
    • 就是这样。修剪。请参阅编辑后的答案。
    • 您使用哪个报告版本?我不敢相信它不支持 TRIM 也不支持 fmDAY ...
    • Wernfried 询问的是 :ATT_DATE 数据类型,而不是函数返回的内容。
    • @Littlefoot 和 wernfried 特别感谢你们俩 littlefoot,你们真好
    【解决方案2】:

    什么代码适合我

    function M_DAY3Formula return Char is
    a varchar2(40);
    B varchar2(40);
    begin
      select RTRIM(to_char(:ATT_DATE,'DAY')) into a from dual;
        IF A = 'SUNDAY'
            THEN B := 'WEEK REST';
        ELSE B := 'PRESENT';
            END IF;
        return B;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-05
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多