暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 给出一年允许的ISO周范围。

askTom 2018-09-11
337

问题描述

嗨,

我必须在oracle表单中包含startweek和endweek验证。在这里,startweek和endweek包括year和像 “201801” 这样的星期数。
每当用户输入超出允许范围的startweek或endweek值时,我必须抛出错误。
这意味着对于用户输入的给定年份,我必须找到startweek和endweek的范围。
此外,没有自定义表具有2019以外的年份数据。
我刚刚加入了一家IT公司。请提供一个可以帮助我解决问题的答案。

在这里,我正在尝试编写一个代码,该代码在给定的年份中给出了数周的时间

将SERVEROUTPUT设置为ON;
声明
L_ 年号;
L_DATE日期;
第一天日期;
最后一天;
周字符 (10);
开始
L_YEAR:= 2019; ------ 此值将通过oracle表单从用户获取
L_DATE:= TO_DATE('01-JAN-'| | L_YEAR,'dd-MM-yyy');
从双重选择TRUNC (L_DATE,'YEAR') 到FIRST_DAY; ---- 一年的第一天 -----
从双选择ADD_MONTHS(TRUNC (L_DATE,'YEAR'),12)-1到最后一天;-一年的最后一天-
DBMS_OUTPUT.PUT_LINE (第一天 | | '| | 最后一天);
从双选择to_char (最后一天,'iw') 进入周;-这给出了最小周 (即开始周信息)。我希望它能提供最后一周的信息 ....
DBMS_OUTPUT.PUT_LINE (周);
结束;

专家解答

谢谢你的密码。

我不确定为什么您需要验证 * 最小 * 周-总是01否?

上周,我们可以:

-拿2019
-添加1 (2020)
-将其转换为日期 (2020年9月10日)
-将其截断到年份 (2020年1月1日)
-减去1 (2019年12月31日)
-得到那个日期的一周

现在,考虑到IW的工作方式,可能是一年的最后一天被视为明年的第1周。所以我们可以减少这个日期,直到一周不是01

SQL> set serverout on
SQL> declare
  2    l_year int := 2019;
  3    l_date date;
  4  begin
  5    l_date := trunc(to_date(to_char(l_year+1),'YYYY'),'YYYY')-1;
  6    while to_char(l_date,'IW') = '01'
  7    loop
  8      l_date := l_date - 1;
  9    end loop;
 10    dbms_output.put_line(l_date||': Week'||to_char(l_date,'IW'));
 11  end;
 12  /
29-DEC-19: Week52

PL/SQL procedure successfully completed.


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论