Sql 对案例陈述有问题吗
我需要从2008年到2018年每年1月的第一天,然后显示该天,然后制作一个案例陈述,其中显示一系列文本 我试着在Oracle指南上查找,但找不到任何与此特定上下文相关的内容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
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金牌徽章时好运!干杯