Wie bekomme ich ein date zwischen zwei data?

Ich versuche, einige Werte zu filtern, und ich muss wissen, ob sie zwischen zwei data oder nicht sein können, aber ich konnte keine SQL erstellen, um dies zu tun.

Ich habe folgendes date: May 10 2010 .

Ich muss feststellen, ob dieses date zwischen zwei data liegen kann, wenn ich einige Jahre dazu hinzufüge.

Beispiel 1 : Kann dieses date zwischen January 15 2014 und June 20 2014 ?

Ja, weil der May 10 2014 ist.

Beispiel2 : Kann dieses date zwischen May 15 2014 und June 20 2014 ?

Nein, denn May 10 2014 und May 10 2015 ist nicht zwischen diesem Intervall.

Beispiel 3 : Kann dieses date zwischen December 15 2013 und June 20 2014 ?

Ja, weil der May 10 2014 ist.

Das ist ein bisschen schwierig in SQL server. Ich denke, der beste path ist, die data auf den 1. Januar zu normalisieren, basierend auf, wenn die time beginnt. Dann können Sie sicherlich den datediff() , um den entsprechenden Jahreswert hinzuzufügen.

Etwas wie das:

 select (case when dateadd(year, datediff(year, newdate, newstart), newdate) between newstart and newend then 'Between' else 'NotBetween' end) from (select (StartDate - datepart(dayofyear, startDate) + 1) as newstart (EndDate - datepart(dayofyear, StartDate) + 1) as newend, (TheDate - datepart(dayofyear, StartDate) + 1) as newdate from (select cast('2013-12-15' as datetime) as StartDate, cast('2014-06-20' as datetime) as EndDate, cast('2010-05-10' as datetime) as thedate ) dates ) dates; 

Du kannst so etwas probieren:

 declare @intervals table (StartDate date, EndDate date); declare @date date = '2010-05-10'; insert into @intervals values ('2014-01-15', '2014-06-20'), ('2014-05-15', '2014-06-20'), ('2013-12-15', '2014-06-20'); select case when dateadd(year,year(EndDate)-year(@date),@date) between StartDate and EndDate then 'Yes' else 'No' end, StartDate, EndDate from @intervals; 

AUSGABE

  StartDate EndDate ---- ---------- ---------- Yes 2014-01-15 2014-06-20 No 2014-05-15 2014-06-20 Yes 2013-12-15 2014-06-20 

Wie wäre es mit dem folgenden Ansatz:

  • Wenn Ihr datesbereich Startdatum und Enddatum haben beide das gleiche Jahr, dann überprüfen Sie, ob das date mit dem Ersetzen des Jahres mit dem Jahr des Bereichs fällt zwischen Ihrem Bereich;
  • Wenn Ihr datesbereich Ende Jahr ist genau ein Jahr mehr als Ihre datesbereich Start Jahr, dann überprüfen, ob entweder das date mit dem Ersetzen des Jahres mit dem Jahr des Bereichs Startdatum fällt zwischen Ihrem Bereich oder wenn das date mit dem Ersetzen des Jahres mit dem Jahr des Bereichs Enddatum fällt zwischen Ihrem Bereich;
  • Wenn Ihr datesbereich Ende Jahr ist mindestens 2 Jahre mehr als Ihr date Bereich Start Jahr, dann wird es immer funktionieren

Sie könnten sich aber mit dem 29. Februar in Schwierigkeiten bringen

Hier ist ein Beispiel

 DECLARE @input datetime ='May 10 2010' set @input = (select dateadd(year, 4, @input)) select * from T where @input >= 'January 15 2014' and @input <= 'June 20 2014' 

Ein einfacher path, dies zu tun, ist, mit DateDiff zu überprüfen.

 DECLARE @input datetime ='May 10 2014' select case when DATEDIFF(d,'2014-01-15',@input) >=0 and DATEDIFF(d,@input, '2014-06-20') >= 0 then 'yes' else 'No' end