반응형
MSSQL의 시스템 테이블 master..spt_values를 활용하여 날짜와 날짜사이의 날짜를 뽑아 낼 수 있습니다
-- 2023년 1월 1일 부터 2023년 12월 31일 까지 날짜 전부 출력
SELECT
dateadd(d,number,'2023-01-01')
FROM
master..spt_values
WHERE type = 'P' and number <= datediff(d,'2023-01-01' ,'2023-12-31')
결과

이걸 가지고 입맛에 맞게 활용하시면 됩니다.
아래는 대충 만들어본 위의 로직을 활용해 만든
2023년 1월의 비지니스 데이를 뽑고 무슨 요일인지 알리는 쿼리입니다.
DATEPART는 1이 일요일이에요
-- 비지니스 데이 구하기
create table #휴일(
dt varchar(8),
comment varchar(50)
)
insert into #휴일
values
('20230121','설날')
,('20230122','설날')
,('20230123','설날')
,('20230124','설날')
,('20230107','토요일')
,('20230108','일요일')
,('20230114','토요일')
,('20230115','일요일')
,('20230128','토요일')
,('20230129','일요일')
,('20230101','일요일')
DECLARE @FD VARCHAR(50)
DECLARE @TD VARCHAR(50)
SET @FD = '20230101'
SET @TD = '20230131'
SELECT
dt ,
DATEPART(WEEKDAY,dt) dw ,
CASE DATEPART(WEEKDAY,dt)
WHEN 1 THEN '일'
WHEN 2 THEN '월'
WHEN 3 THEN '화'
WHEN 4 THEN '수'
WHEN 5 THEN '목'
WHEN 6 THEN '금'
WHEN 7 THEN '토'
END dwk
FROM
(
SELECT
convert(char(10),dateadd(d,number,@FD),112) dt
FROM
master..spt_values
WHERE type = 'P' and number <= datediff(d,@FD ,@TD)
)cal
WHERE cal.dt not in (SELECT dt FROM #휴일 WHERE CONVERT(DATETIME,dt , 112) BETWEEN @FD AND @TD)
날짜 사이의 모든 월 구하기
-- 날짜 사이의 모든 월 구하기
DECLARE @FD VARCHAR(50)
DECLARE @TD VARCHAR(50)
SET @FD = '20230101'
SET @TD = '20230531'
SELECT
left(dt,6)
FROM
(
SELECT
convert(char(10),dateadd(d,number,@FD),112) dt
FROM
master..spt_values
WHERE type = 'P' and number <= datediff(d,@FD ,@TD)
)cal
GROUP BY left(dt,6)
혹시 날짜 가지고 이런 쿼리 알고 싶다 하시는 거 있으면 댓글로 적어놓으시면
추가해 드리겠습니다.
반응형
'코딩 > MSSQL' 카테고리의 다른 글
| 테이블 명세서 작성 시 쿼리 (0) | 2023.03.07 |
|---|---|
| MSSQL 연말이 포함된 주까지 조회 (0) | 2023.02.02 |