2017-01-04 5 views
0

Ich benutze SQL Server 2008. Ich möchte Datum aus dem aktuellen Datum und einige Eingabe Tage erhalten.So finden Sie das Datum nach einigen Tagen der Tage

Zum Beispiel: Zeiten in Tagen = 300 (können alle Tage als Benutzer erforderlich sein)

Aktuelles Datum

ich das versucht:

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 

Wie wird das Datum zwischen diesen beiden bekommen ?

+0

Bitte zeigen Abtastwerteingang und erwartete Ausgabe. – DarkKnight

Antwort

0

Dies ist eine Möglichkeit, es zu tun

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 

Update: Wenn Sie erst nach period Anzahl der Tage endDate wollen, hier ist es

DATEADD(dd,@Period,@fromDate) 

Hinweis, period Typ sein muss int

+0

Danke ..! Es wird das gesamte Datum zwischen Periode und aktuellem Datum angezeigt, aber ich möchte nur das Enddatum nach dieser Periode ab dem aktuellen Datum. –

+0

@AnjuMuralidharan: Überprüfen Sie das Update. – DarkKnight

+0

Vielen Dank !! Es funktioniert gut .. :) –

0

Um dies zu erreichen, verwenden Sie die Funktion DATEADD(). Sie müssen dann einen Weg finden, um die Datumsteile als Variablen zu übergeben.

In Bezug auf Ihren geposteten Code ... Was passiert, wenn Sie das ausführen?

0

Dies ist eine andere Möglichkeit, wenn Sieübergeben werden 0 direkt -

;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) 

Edit: Wenn Sie nur das Enddatum wollen, dann sollte dies für Sie tun -

;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

Vielen Dank für Ihre Antwort !! Es erhalten alle Datum zwischen Zeitraum und aktuelles Datum, aber ich möchte nur das Enddatum nach dieser Zeit ab dem aktuellen Datum. –

Verwandte Themen