일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- VLOOKUP
- productivity Power Tools
- 알뜰요금제
- xmlviewer
- 알뜰유심
- 유니콘
- 소스비교
- 광고차단
- IFC
- applestore
- advil
- #알뜰폰
- OPENDART
- 알뜰
- 유니콘광고차단
- XML무료뷰어
- xml뷰어
- 애드빌용법
- 유니콘앱
- AWS
- 여의도IFC
- vs2017
- VS2019
- 금융감독원API
- 유심무료
- SK7MOBILE
- json #paramquery
- apple여의도
- VS2015
- 애드빌
- Today
- Total
체크개발자's Blog
MSSQL 날짜 출력, 시간대별 출력 본문
기본적으로 SQL 에서 제공해주는 데이터로 우리는 원하는 기간동안의 날짜를 모두 출력 해 낼 수 있다.
select convert(char(10),dateadd(증가시킬데이터(m:월, d:일, hh:시간, mm:분) ,number,'시작날짜'),120) as regdate
from master..spt_values with(nolock)
where type = 'P'
and convert(char(10),dateadd(d,number,'시작날짜'),120) < '마지막날짜'
이렇게 원하는 기간 내의 날짜를 출력 해 낼 수 있다.
ex)
select convert(char(10),dateadd(d,number,'2012-04-24'),120) as regdate
from master..spt_values with(nolock)
where type = 'P'
and convert(char(10),dateadd(d,number,'2012-04-24'),120) < DateAdd("m", 1, '2012-04-24')
마지막 날짜를 mssql 에서 제공하는 DateAdd 함수를 이용해서 한달을 더해 출력 해 보았다
결과는 다음과 같다.
2012-04-24
2012-04-25
2012-04-26
2012-04-27
2012-04-28
2012-04-29
2012-04-30
2012-05-01
2012-05-02
2012-05-03
2012-05-04
2012-05-05
2012-05-06
2012-05-07
2012-05-08
2012-05-09
2012-05-10
2012-05-11
2012-05-12
2012-05-13
2012-05-14
2012-05-15
2012-05-16
2012-05-17
2012-05-18
2012-05-19
2012-05-20
2012-05-21
2012-05-22
2012-05-23
이걸 이용하여 left조인 하여 원하는 날짜에 원하는 데이터를 추출 해 낼 수 있다..
보너스.
활용을 조금 더 하자면 시간대 별 데이터 까지 출력이 가능하다.
select right(convert(char(13),dateadd(hh,number,'시작날짜'),120),2) as regdate
from master..spt_values with(nolock)
where type = 'P'
and convert(char(10),dateadd(hh,number,'시작날짜'),120) < '마지막날짜'
이렇게 해서 원하는 기간내에서 해당되는 날짜와 또한 그 날짜의 시간대 별 데이터까지
group by 시킬 수가 있다.
실전활용예제 )
select
regdate,
isnull(tot,0),
isnull(cnt,0)
from
(
select right(convert(char(13),dateadd(hh,1,'2012-04-24'),120),2) as regdate
from master..spt_values with(nolock)
where type = 'P'
and convert(char(10),dateadd(hh,number,'2012-04-24'),120) < DateAdd(d, 1, '2012-04-24')
) as t1
left join
(
SELECT right(CONVERT(char(13), d_regdate, 120),2) as 열1, sum(열1) as tot, count(열1) as cnt
FROM 데이터를 조회할 테이블
WHERE convert(char(10),D_REGDATE,120) >= '2012-04-24'
AND convert(char(10),D_REGDATE,120) <= '2012-04-24'
group by right(CONVERT(char(13), d_regdate, 120),2)
) as t2
on t1.regdate = t2.d_regdate
group by t1.regdate, t2.d_regdate, tot,cnt
order by t1.regdate;
난 하루치만 조회할 예정이었으므로 음하하핫.
※이렇게 left join문을 써서 복잡하게 조회 한 까닭은 데이터를 페이지에 뿌려주는데, join을 하지 않고 그냥 쿼리문을 썼을 때 데이터가 없는 시간대에는 0을 해주고 싶은데, 데이터 자체가 없기에 그 시간대는 아예 결과에 나타나지 않았다.
예를 들면
01 1233 4
02 1234 2
04 3412 4
이런식으로 3시 대의 결과가 빠져서 된다.
이를 해결해 주기위해서 웹언어로 구현을 해도 되겠지만, 그렇게 되면 조회되는 데이터에 따라 달라지기에 소스가 복잡해 질 수 있기에, 모든 시간대를 결과로 출력하고 isnull(열이름,0) 을 통해
null일때는 0을 출력하게 만들어줌으로 결과가 없는 시간대에는
01 1233 4
02 1234 2
03 0 0
04 3412 4
이라는 결과를 얻을 수 있다.
-끗-
[출처] MSSQL 날짜 출력, 시간대별 출력 |작성자 꾸앵
'DataBase > MS-SQL' 카테고리의 다른 글
SELECT 하는데 LOCK 이 걸린 것 같다. 느리다. (0) | 2021.01.24 |
---|---|
MS-SQL 프로시저, 함수 - 생성일, 최종 수정일 조회 (0) | 2021.01.03 |
CURSOR (0) | 2014.04.04 |
MS SQL SERVER 블로그 - 쿼리 실행 분석 (0) | 2014.04.04 |
SQL SERVER 2008/2012 단축키 (0) | 2014.04.02 |