[SQL] 두 날짜 사이의 금요일의 수
SQL두 날짜 사이의 금요일의 수
어떻게 (날짜 모두 포함) 두 날짜 사이의 금요일의 수 오라클 SQL에서 SELECT 문을 사용하여 찾을 수 있습니까?
해결법
-
==============================
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.나는 달력 테이블을 사용하여 내 두 센트에 던져해야합니다. (그것은 강요합니다.)
나는 달력 테이블을 사용하여 내 두 센트에 던져해야합니다. (그것은 강요합니다.)
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.보다:
보다:
왜 보조 달력 테이블을 사용하여 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.
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.이 하나를 수정하십시오 :
이 하나를 수정하십시오 :
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.
SELECT (NEXT_DAY('31-MAY-2012','SUN') -NEXT_DAY('04-MAR-2012','SUN'))/7 FROM DUAL
-
==============================
7.선택 / 7 (b @ 2 @ (DATEDIFF (DD,)) + DATEPART (DW를, (a-6)) @)
선택 / 7 (b @ 2 @ (DATEDIFF (DD,)) + DATEPART (DW를, (a-6)) @)
from https://stackoverflow.com/questions/4967808/number-of-fridays-between-two-dates by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL JDBC getgeneratedkeys 반환 열 "ID"을 (를) 찾을 수 없습니다, 열 유형의 알 수없는 (0) | 2020.07.08 |
---|---|
[SQL] SQL Server 2008의 쉼표로 분할 문자열 (0) | 2020.07.08 |
[SQL] 합니까 오라클 롤 오류에 트랜잭션을? (0) | 2020.07.08 |
[SQL] 어떻게 PHP :: PDO를 사용하여 변수 MySQL의 스크립트를 실행하려면? (0) | 2020.07.08 |
[SQL] PostgreSQL의 여러 배열의 교차로 (0) | 2020.07.08 |