두개의 날짜가 있습니다.
A = 2010-01-02 라는 날짜 고 B= 2011-01 이라는 날짜가 있어요...
A는 년월일이 붙어있고 B 는 년월만 붙어있는데
A에서 년월까지 짜르고 A 가 B년월까지 똑같아 질때 까지의 수를
(한마디로 2010년02월(+1),2010년03월(+2).........2011년01월 (+12번)까지 올라간 횟수를 ) 구하고 싶은데 스칼라 함수로 for 문 돌려서
사용을 하여 구현을 하기는 했습니다.. 그런데 스칼라 함수를 써서 속도가 너무 느리게 나와 이것을 datediff 라는 함수로 구하는것이 있는데 datetime형식으로 바꿔서 사용을 해야된다고 하네요... 위의 두개의 A 와 B를 datetime 형식으로 변환을 할 수 가 있는 방법이 있는가요???
아니면 스칼라 함수가 아닌 일반 쿼리문에서 A 가 B 까지 똑같아질때까지의 (월을 기준으로 + 1로 지정.) 횟수를 구할 수가 있는지요???
소중한 답변 부탁드립니다ㅜ.,ㅜ 스칼라 함수써서 너무 느려졌다.ㅜㅜ;;;
Comment 4
-
초짜해커
2013.07.17 11:42
DECLARE @A CHAR(10)DECLARE @B CHAR(10)SET @A = '2010-01-02'SET @B = '2011-01'SELECT DATEDIFF(MONTH, @A, @B + '-01') -
건우아빠
2013.07.17 11:49
초짜해커님답글을 이용해서..
with res as
(
select '2010-01-02' yymmdd , '2011-01' yymm
)
select convert(varchar(7), DATEADD(mm, r.number + 1 , a.yymmdd) , 120)
from res a
cross apply
(
select number
from master.dbo.spt_values
where type = 'P'
and number < DATEDIFF(mm, a.yymmdd ,a.yymm+'-01')
) r -
쿠아앙
2013.07.17 15:00
악 감사합니다.ㅜ.ㅜ~~!~쉽게 할 수있는걸 어렵게 갔네요.
-
한태
2016.03.10 19:57
create table mon_mi
(A varchar(10),
B varchar(10))
insert into mon_mi values
('2015-01-02', '2016-01'),
('2015-03-02', '2016-01'),
('2015-07-02', '2016-01'),
('2015-10-02', '2016-05')
select * from mon_mi
select DATEDIFF(mm,a,b+'-01')
from mon_mi
'date는 식, 열 식, 사용자 정의 변수 또는 문자열 리터럴일 수 있습니다. '
위의 특징을 가지기에 날짜형식으로 따로 변환하지 않아도 됩니다.