2017-01-04 4 views
0

SQL Server 2008을 사용하고 있습니다. 현재 날짜와 일부 입력 일로부터 날짜를 가져 오려고합니다.몇 일 후에 날짜를 찾는 방법

예를 들어

:

ALTER PROCEDURE [dbo].[SCHEME_DETAILS_SUBCRIBE] 
    @PERIOD varchar(50) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO [USER_SUBCRIPTION_DETAILS] ([USER_SUB_DATE], [USER_SUB_END_DATE]) 
    VALUES(,GETDATE(), DATEADD(DAY, @PERIOD, GETDATE())) 
END 

방법이 두 가지 사이의 날짜를 얻을 것이다 : 일의 기간 = 300 내가이 시도

현재 날짜 (사용자의 필요와 같은 일 수 있음) ?

+0

샘플 입력 및 예상 출력을 제시해주십시오. – DarkKnight

답변

0

이 하나 개의 방법이 업데이트

DECLARE @Period INT = 10 --300 in your case 
DECLARE @FromDate DATE = GETDATE() 
DECLARE @ToDate DATE = DATEADD(dd,@Period,@fromDate) 

;WITH cte AS 
(
    SELECT @fromDate AS dt 
    UNION ALL 
    SELECT DATEADD(dd,1,dt) FROM cte WHERE dt<@ToDate 
) 

SELECT * FROM cte 

일이다

+0

감사합니다 ..! 그것은 기간과 현재 날짜 사이의 모든 날짜를 얻지 만, 나는 단지 그 날짜 이후의 종료 날짜를 원합니다. –

+0

@AnjuMuralidharan : 업데이트를 확인하십시오. – DarkKnight

+0

정말 고마워요 !! 잘 작동합니다 : :) –

0

이 작업을 수행하려면 DATEADD() 함수를 사용하십시오. 그런 다음 날짜 부분을 변수로 전달하는 방법을 찾아야합니다.

게시 된 코드와 관련하여 ... 실행하면 어떻게됩니까? 만 일 period 수 후 종료 날짜하려면 는, 여기 유형 int이어야합니다

DATEADD(dd,@Period,@fromDate) 

주, period입니다 :

0

을 전달하는 경우이를 수행하는 또 다른 방법입니다. 0 직접 -

;with cte as (
select getdate() as [urdate], 1 as Level 
union all 
select dateadd(dd,1,urdate), level + 1 
from cte where level < 300 -- here the 300 can vary based on your input/ user input 
) 
select cast(urdate as date) from cte option (MaxRecursion 0) 

편집 : 만 종료 날짜를 원하는 경우 다음이 당신을 위해 무엇을해야 -

;with cte as (
select getdate() as [urdate] 
union all 
select dateadd(dd,300,getdate()) -- this is the main statement and 300 will be configurable in your case 
) 
select cast(urdate as date) from cte 
+0

답장을 보내 주셔서 감사합니다 !! 그것은 기간과 현재 날짜 사이의 모든 날짜를 가져 오지만 그 기간 이후의 끝 날짜 만 현재 날짜부터 원합니다. –

관련 문제