캘린더와 첫 번째 주를 Oracle Database에서 검색하는 방법
하고 싶은 일
대상의 날짜가 그 달의 제 2주째에 있는지를 내고 싶다. (주의 시작은 일요일로 한다)
2019년 12월에 비유하면, 이미지는 이하.
필요한 배경
주마다 값을 집계하는 SQL을 쓰게 되어, 조사해도 to_char의 'w'로 그 일자가 제 ○요일인지의 요구 방법 밖에 나오지 않았으므로, 비망록으로서 투고.
결론
로직이나 SQL만 알고 싶은 사람을 위해 먼저 결론을 써 둡니다.
수식
(対象日付 + 月初日付の曜日番号 - 1 + 6 ) ÷ 7
SQL 샘플
SELECT
TRUNC((TO_NUMBER(TO_CHAR(TO_DATE('2020/01/01', 'YYYY/MM/DD'),'DD')) + TO_NUMBER(TO_CHAR(TRUNC(TO_DATE('2020/01/01', 'YYYY/MM/DD'),'MONTH'),'D')) - 1 + 6) / 7,0) as week
FROM
DUAL
구체적인 방법
우선, 월초의 요일을 신경쓰지 않고, 그 일자가 제 몇주에 있는지를 7로 나눈 몫으로 요구합니다.
첫 번째 주목은 1로 내기 때문에 날짜에 6을 더합니다.
(7일에 7을 더해 14로 하면 2가 되어 버리므로, 6을 더합니다)
예)
x월 1일 + 6/7 = 1 (별로 0)
x월 2일 + 6/7 = 1 (별로 1)
x월 3일 + 6/7 = 1 (별로 2)
x월 4일 + 6/7 = 1 (별로 3)
x월 5일 + 6/7 = 1 (별로 4)
x월 6일 + 6/7 = 1 (별로 5)
x월 7일 + 6/7 = 1 (별로 6)
지금까지 다음 식이 완성됩니다.
(対象日付 + 6) ÷ 7
그런 다음 해당 달의 시작 요일을 찾습니다.
캘린더는 반드시 일요일에 시작하는 것은 아니므로 고려해야합니다. . .
그래서 시작일의 요일 번호를 얻습니다.
※Oracle에서는, 요일 번호는 to_char의 'D'로 취득할 수 있습니다.
각 요일 번호는 다음과 같습니다.
번호
요일
1
일요일
2
월요일
3
화요일
4
수요일
5
목요일
6
금요일
7
토요일
2020년 1월을 예로 들면 다음과 같이 합니다.
일요일부터 시작요일까지의 차이를 구합니다.
2020년 1월은 시작요일이 수요일이며, 일요일부터 3일이 지나고 있기 때문에 방정식의 대상 날짜 뒤에
曜日番号 - 1
를 더합니다.(対象日付 + 曜日番号 - 1 + 6) ÷ 7
이것으로 식이 완성되었습니다.
시험에 2020/01/01을 대상 날짜로 하면 다음과 같이 됩니다.
(1 + 4 - 1 + 6) ÷ 7 = 1週目
SQL에서 캘린더를 표시하고 해당 날짜에 해당하는 주 번호 표시
지금까지의 생각을 사용해, 2020/01/01~2020/01/31의 일자와 주 번호를 구하는 샘플은 이하와 같습니다.
SQL 샘플
SELECT
TRUNC(TO_DATE('2020/01/01', 'YYYY/MM/DD'),'MONTH') + ROWNUM - 1 as ac_date,
TRUNC((TO_NUMBER(TO_CHAR(TRUNC(TO_DATE('2020/01/01', 'YYYY/MM/DD'),'MONTH') + ROWNUM - 1,'DD')) + TO_NUMBER(TO_CHAR(TRUNC(TO_DATE('2020/01/01', 'YYYY/MM/DD'),'MONTH'),'D')) - 1 + 6) / 7,0) as week
FROM
ALL_CATALOG
WHERE
TRUNC(TO_DATE('2020/01/01', 'YYYY/MM/DD'),'MONTH') + ROWNUM - 1 <= LAST_DAY(TO_DATE('2020/01/01', 'YYYY/MM/DD'))
실행 결과
AC_DATE WEEK
-------- ----------
20-01-01 1
20-01-02 1
20-01-03 1
20-01-04 1
20-01-05 2
20-01-06 2
20-01-07 2
20-01-08 2
20-01-09 2
20-01-10 2
20-01-11 2
20-01-12 3
20-01-13 3
20-01-14 3
20-01-15 3
20-01-16 3
20-01-17 3
20-01-18 3
20-01-19 4
20-01-20 4
20-01-21 4
20-01-22 4
20-01-23 4
20-01-24 4
20-01-25 4
20-01-26 5
20-01-27 5
20-01-28 5
20-01-29 5
20-01-30 5
20-01-31 5
31行が選択されました。
Reference
이 문제에 관하여(캘린더와 첫 번째 주를 Oracle Database에서 검색하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maid_otaku/items/6e1a773b9b788f392c84텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)