算上周末的SQL生日

时间:2018-09-12 19:18:37

标签: sql oracle plsql

我正在尝试用pl / sql(oracle)编写一个程序,该程序必须计算某人的生日在周末的次数。

这就是我得到的,但是例如在2018年至1990年的每一个循环(-1年)中我都缺少类似的提取物。

有人可以帮我吗?

SET SERVEROUTPUT ON;
DECLARE
    v_counter number default 0;
    v_real_birthdate date default to_date('01/01/1990', 'DD/MM/YYYY');
    v_birthdate date default to_date('01/01/2018', 'DD/MM/YYYY');
BEGIN

    WHILE v_counter < 28
    LOOP
        v_leeftijd := v_leeftijd +1;
        dbms_output.put_line( ( TO_CHAR( v_birthdate, 'DAY' ) ) );
    END LOOP;

END;

2 个答案:

答案 0 :(得分:2)

如果我们假设我是在今天的2010年这一天出生的(那时将是2010-09-12(yyyy-mm-dd)),那么结果将逐步如下。

  • MY_BIRTHDAY代表我们同意的生日
  • YEARS使用分层查询,并产生我从2010年到当年(2018年)的生日
  • DAYS使用英语从我的生日中提取每年的日期名称
  • 最终结果过滤掉了周末(星期六,日)

如果您有兴趣了解每个CTE所返回的内容,请逐一运行,然后您会看到。

df['Exceptions'] = df['ErrorMessage'].str.extract(r"---> ([^:]+): ")

答案 1 :(得分:1)

您可以使用以下查询(假设1981年2月6日是生日):

WITH b AS (SELECT TO_DATE('02/06/1981', 'MM/DD/RRRR') birthday FROM dual)
SELECT SUM(CASE WHEN TO_CHAR(birthday + (INTERVAL '1' YEAR) * (LEVEL -1), 'FMD') IN ('1','7') THEN 1 END)
  FROM b
 CONNECT BY birthday + (INTERVAL '1' YEAR) * (LEVEL - 1) <= sysdate

TO_CHAR(...,'FMD')给出从1 =星期日到7 =星期六的星期几