-- 특정 월의 N번째 특정 요일에 해당하는 날짜 찾기
DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,[특정 요일을 구하는 경우의 N번째주에 존재할 수 있는 최대일수]-datepart(day,[MONTH]),[MONTH])), [DAY])
ㄴ [특정 요일을 구하는 경우의 N번째주에 존재할 수 있는 최대일수]
ex1) 일요일 => 첫번째주:7, 두번째주:14, 세번째주:21, 네번째주:28
ex2) 월요일 => 첫번째주:6, 두번째주:13, 세번째주:20, 네번째주:27
ex3) 화요일 => 첫번째주:5, 두번째주:12, 세번째주:19, 네번째주:26
ex4) 수요일 => 첫번째주:4, 두번째주:11, 세번째주:18, 네번째주:25
ex5) 목요일 => 첫번째주:3, 두번째주:10, 세번째주:17, 네번째주:24
ex6) 금요일 => 첫번째주:2, 두번째주:9, 세번째주:16, 네번째주:23
ex7) 토요일 => 첫번째주:1, 두번째주:8, 세번째주:15, 네번째주:22
ㄴ [MONTH]: 찾고자 하는 월의 날짜 (데이터타입은 datetime 또는 'yyyyMMdd')
ㄴ [DAY]: 찾고자 하는 요일의 값 (-1:일요일, 0:월요일, 1:화요일, 2:수요일, 3:목요일, 4:금요일, 5:토요일)
예)
-- 이번달의 1~4번째 일요일에 해당하는 날짜 찾기
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,7-datepart(day,getdate()),getdate())), -1) -- 첫번째 일요일 날짜
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,14-datepart(day,getdate()),getdate())), -1) -- 두번째 일요일 날짜
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,21-datepart(day,getdate()),getdate())), -1) -- 세번재 일요일 날짜
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,28-datepart(day,getdate()),getdate())), -1) -- 네번째 일요일 날짜
-- 이번달의 1~4번째 화요일에 해당하는 날짜 찾기
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,5-datepart(day,getdate()),getdate())), -1) -- 첫번째 화요일 날짜
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,12-datepart(day,getdate()),getdate())), -1) -- 두번째 화요일 날짜
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,19-datepart(day,getdate()),getdate())), -1) -- 세번재 화요일 날짜
select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,26-datepart(day,getdate()),getdate())), -1) -- 네번째 화요일 날짜
출처: https://soohyeon317.tistory.com/entry/MSSQL-특정-월의-N번째-특정-요일에-해당하는-날짜-찾기 [Dean Story]
'SQL' 카테고리의 다른 글
[MSSQL] 정렬 order by 영문 한글 섞여있을때 (0) | 2022.06.28 |
---|---|
[MSSQL] 쿼리문 테이블명 빨간 줄 발생 시 해결 방법 (0) | 2022.02.22 |
[MSSQL] 동적관리뷰 DMV (0) | 2020.03.24 |
[MSSQL] 결과집합의 이전 행과 다음 행 데이터를 가져오는 LAG, LEAD 함수 (0) | 2019.11.11 |
[MSSQL] 화폐단뒤, 세번째콤마 (0) | 2018.04.19 |