복붙노트

[SQL] 두 날짜 사이의 금요일의 수

SQL

두 날짜 사이의 금요일의 수

어떻게 (날짜 모두 포함) 두 날짜 사이의 금요일의 수 오라클 SQL에서 SELECT 문을 사용하여 찾을 수 있습니까?

해결법

  1. ==============================

    1.이 그것을 할 것입니다 :

    이 그것을 할 것입니다 :

    select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
    from data
    

    아마도 가장 그 아래를 어기면. NEXT_DAY 함수는 날짜 이후 (이 경우 금요일)을 인 다음 일을 반환합니다.

    D1이 될 것 후 그래서 첫 번째 금요일을 찾을 수 있습니다 :

    next_day( d1, 'FRI')
    

    그러나 D1 우리가 조정할 수 있도록 다음 금요일을 반환하는 금요일 인 경우 :

    next_day( d1-1, 'FRI')
    

    마찬가지로 지난 금요일 (D2)를 포함하여 최대 찾기 위해 우리가 할 :

    next_day( d1-7, 'FRI')
    

    2를 빼면 일 수를 제공합니다 : 0 그들은 같은 날짜, 7 있다면 그들은 A가 떨어져 등이 주를 다시하는 경우 :

    next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI') 
    

    주 변환 :

    (next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
    

    그들은 같은 날 경우 마지막으로, 우리는 0을 얻을 수 있지만, 거기에 정말 금요일 1, 그래서 우리가 하나를 추가 등등 :

    ((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1
    
  2. ==============================

    2.나는 달력 테이블을 사용하여 내 두 센트에 던져해야합니다. (그것은 강요합니다.)

    나는 달력 테이블을 사용하여 내 두 센트에 던져해야합니다. (그것은 강요합니다.)

    select count(*) as num_fridays
    from calendar
    where day_of_week = 'Fri'
      and cal_date between '2011-01-01' and '2011-02-17';
    
    num_fridays
    -----------
    6
    

    죽은 간단한 이해합니다. 인덱스를 활용합니다.

    어쩌면 내가 12 단계 그룹을 시작해야합니다. 표 익명 달력.

  3. ==============================

    3.보다:

    보다:

    왜 보조 달력 테이블을 사용하여 I 고려해야한다?

    이 기사의 코드는 SQL 서버를 위해 특별히하지만 기술은 대부분의 SQL 플랫폼에 이식 할 수 있습니다.

    자리에 달력 테이블 쿼리는 간단 수

    SELECT COUNT(*) AS friday_tally
      FROM YourTable AS T1
           INNER JOIN Calendar AS C1
              ON C1.dt BETWEEN T1.start_date AND T1.end_date
     WHERE C1.day_name = 'Friday'; -- could be a numeric code
    
  4. ==============================

    4.

    select sum(case when trim(to_char(to_date('2009-01-01','YYYY-MM-DD')+rownum,'Day')) = 'Friday' then 1 else 0 end) number_of_fridays
    from dual
    connect by level <= to_date('&end_date','YYYY-MM-DD') - to_date('&start_date','YYYY-MM-DD')+1;
    

    원본 소스 - http://forums.oracle.com/forums/thread.jspa?messageID=3987357&tstart=0

  5. ==============================

    5.이 하나를 수정하십시오 :

    이 하나를 수정하십시오 :

    CREATE OR REPLACE FUNCTION F_WORKINGS_DAYS  
    (V_START_DATE IN DATE, V_END_DATE IN DATE)
    
    RETURN NUMBER IS
    DAY_COUNT NUMBER := 0;
    CURR_DATE DATE;
    
    BEGIN -- loop through and update
    CURR_DATE := V_START_DATE;
    WHILE CURR_DATE <= V_END_DATE
    LOOP
        IF TO_CHAR(CURR_DATE,'DY') NOT IN ('SAT','SUN') -- Change this bit to ignore all but Fridays
            THEN DAY_COUNT := DAY_COUNT + 1;
        END IF;
        CURR_DATE := CURR_DATE + 1;
    END LOOP;
    
        RETURN DAY_COUNT;
    END F_WORKINGS_DAYS;
    

    /

  6. ==============================

    6.

    SELECT (NEXT_DAY('31-MAY-2012','SUN')
    -NEXT_DAY('04-MAR-2012','SUN'))/7 FROM DUAL
    
  7. ==============================

    7.선택 / 7 (b @ 2 @ (DATEDIFF (DD,)) + DATEPART (DW를, (a-6)) @)

    선택 / 7 (b @ 2 @ (DATEDIFF (DD,)) + DATEPART (DW를, (a-6)) @)

  8. from https://stackoverflow.com/questions/4967808/number-of-fridays-between-two-dates by cc-by-sa and MIT license