[MSSQL] 날짜,시간 데이터 생성하기



날짜나 시간단위의 데이터가 로우로 들어 오는 경우


간혹 데이터 자체가 누락 되는 경우가 있다


시간 순서대로 보여줘야 하는데 데이터 누락으로 로우가 없어 데이터가 땡겨져버리는 경우가 있기 때문에


그런종류의 데이터는 별도로 시간이나 날짜 로우를 만들어 낸 후 거기에 끼워 맞추는 식으로 가져 온다.



oracle을 사용할때는 별 문제 없이 만들었는데


mssql에서는 날짜나 시간을 만들어 내는 쿼리를 몰라 한참을 해매다 알아낸 방법이다


1. 날짜+시간 단위 생성 방법


1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE @start_date DATETIME = '2018-07-12 00:00:00.000'-- 시작시간
DECLARE @end_date DATETIME = '2018-07-13 00:00:00.000'-- 
 
WITH    AllDays
          AS ( SELECT   @start_date AS [Date], 1 AS [level]
               UNION ALL
               SELECT   DATEADD(hour, 1, [Date]), [level] + 1
               FROM     AllDays
               WHERE    [Date] < @end_date )
 
 
     SELECT [Date], [level]
     FROM   AllDays OPTION (MAXRECURSION 0)
cs



1-1 결과값






위와 같이 쿼리를 짜주게 되면 해당 범위만큼의 날짜,시간을 생성해 준다



2. 날짜단위 생성방법


1
2
3
4
5
6
7
8
DECLARE @Date1 DATE, @Date2 DATE
SET @Date1 = '20150430'
SET @Date2 = '20150601'
 
SELECT DATEADD(DAY,number+1,@Date1) [Date]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Date1) < @Date2
cs


2-1 결과값






이런 결과를 얻어낼 수 있다.



와...


그런데 이거 포스팅하다가 실제로 프로젝트에 써야 하는 쿼리 실수로 날려먹음...



다시 짜야 되는데 스트레스 엄청받는다.


+ Recent posts