Sql 对案例陈述有问题吗

Sql 对案例陈述有问题吗,sql,oracle,plsql,Sql,Oracle,Plsql,我需要从2008年到2018年每年1月的第一天,然后显示该天,然后制作一个案例陈述,其中显示一系列文本 我试着在Oracle指南上查找,但找不到任何与此特定上下文相关的内容 Declare lv_date date; day_of_week VARCHAR2(30); day_of_week_exp VARCHAR2(30); begin lv_date := TO_DATE('1-Jan-2008','dd-mon-yyyy'); for i in 1..11 loop day_of

我需要从2008年到2018年每年1月的第一天,然后显示该天,然后制作一个案例陈述,其中显示一系列文本

我试着在Oracle指南上查找,但找不到任何与此特定上下文相关的内容

Declare
lv_date date;
day_of_week   VARCHAR2(30);
day_of_week_exp   VARCHAR2(30);
begin
lv_date := TO_DATE('1-Jan-2008','dd-mon-yyyy');
for i in 1..11 
loop
day_of_week := TO_CHAR(lv_date,'DAY');
DBMS_OUTPUT.PUT_LINE(day_of_week);

CASE
WHEN day_of_week = 'MONDAY' THEN DBMS_OUTPUT.PUT_LINE('moody' || 
day_of_week);
end case;

lv_date := ADD_MONTHS(lv_date,12);
end loop;

end;

您不需要PL/SQL,但可以使用SQL直接获得所需的结果:

select 2007 + level as year,
       trunc(to_date(2007 + level,'YYYY'),'YYYY') as first_day_of_year,
       to_char(trunc(to_date(2007 + level,'YYYY'),'YYYY'),'Day') as first_day_week
  from dual
 connect by level <= 2018 - 2008 + 1;
如果要按周一筛选,请通过将上述SQL转换为游标来使用PL/SQL:

SQL> set serveroutput on
SQL> begin
  for c in 
    ( select 2007 + level as year,
             trunc(to_date(2007 + level,'YYYY'),'YYYY') as first_day_of_year,
             to_char(trunc(to_date(2007 + level,'YYYY'),'YYYY'),'Day') as day_of_week_exp
        from dual
     connect by level <= 2018 - 2008 + 1
    )
  loop
   if trim(c.day_of_week_exp) = 'Monday' then
    dbms_output.put_line('moody' ||c.day_of_week_exp);
   end if;
  end loop;
end;
/

BDW,所需的只是将else部分添加到您的案例陈述中

当周中的天=星期一时,DBMS输出。将行“moody”|周中的天; 否则无效;
终例

我知道我不能使用“MONDAY”,它实际上编码为01-JAN-2008,但我不知道如何将day\u week\u week转换为字符串MONDAY(如果有意义)。请使用to\u CHAR函数。谢谢你,我想要的是修剪部分:D,但代码的其余部分更有意义。我正在做的实践不希望我这样做,但它有帮助。嘿@BarbarosÖzhan。。。祝贺您获得金牌sql徽章,祝您在追求oracle金牌徽章时好运!干杯