코딩/MSSQL

MSSQL 날짜와 날짜 사이의 날짜 조회

로또예비당첨자 2023. 1. 27. 14:16
반응형

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