2 Stimmen

Holen Sie das Startdatum und Enddatum der angegebenen Woche des Monats ab

Ich muss das Startdatum und Enddatum aus der spezifizierten (1/2/3/4/5) Woche des Monats finden. So kann ich die Datensätze erhalten, bei denen Date_Created in der spezifizierten (1/2/3/4/5) Woche liegt.

Zum Beispiel, wenn

Ich die 1. Woche des Februars 2013 wähle, dann 
möchte ich Startdatum = 2/1/2013 und Enddatum = 2/2/2013
Ich die 2. Woche des Februars 2013 wähle, dann 
möchte ich Startdatum = 2/3/2013 und Enddatum = 2/9/2013

und ähnlich für die restlichen Wochen.

Ich habe SQL Server 2008 auf der Datenbankseite. Wenn jemand eine Idee hat, bitte teilen.

3voto

valex Punkte 23916

Hier ist eine Abfrage, um alle Start- und Enddaten der Woche für den angegebenen Monat zu erhalten. Sie können also aus dieser Abfrage die Woche auswählen, die Sie benötigen:

SQLFiddle Beispiel

with C(i) as 
( select CAST('2013-02-01' as datetime) i
  UNION ALL
  select DATEADD (day,1,i) i from C 
    where DATEADD (day,1,i)

1voto

blue Punkte 568

Ich habe ein Verfahren geschrieben, um mein Problem zu lösen, welches die Kalenderwoche (1/2/3/4/5) als Eingabe annimmt und Startdatum und Enddatum zurückgibt

ALTER PROCEDURE dbo.SPGetStartAndEndDateofSpcifiedWeek
    @Woche int
AS
    SET NOCOUNT ON 
    DECLARE @Datum DateTime
    DECLARE @aktuellesdatum DateTime
    DECLARE @startdatum DateTime
    DECLARE @enddatum DateTime
    DECLARE @AktuelleWoche int

    /*SET @Datum  = CONVERT(date,GETDATE())*/
    SET @aktuellesdatum  = CONVERT(date,GETDATE())
    SET @AktuelleWoche = datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, GETDATE()), 0)), 0), GETDATE() - 1) + 1

    IF (@Woche = 1)
    BEGIN
        IF (@AktuelleWoche = 1)
        BEGIN SET @Datum = @aktuellesdatum END
        IF (@AktuelleWoche = 2)
        BEGIN SET @Datum = @aktuellesdatum - 7 END
        IF (@AktuelleWoche = 3)
        BEGIN SET @Datum = @aktuellesdatum - 14 END
        IF (@AktuelleWoche = 4)
        BEGIN SET @Datum = @aktuellesdatum - 21 END
        IF (@AktuelleWoche = 5)
        BEGIN SET @Datum = @aktuellesdatum - 28 END
    END
    IF (@Woche = 2)
    BEGIN
        IF (@AktuelleWoche = 1)
        BEGIN SET @Datum = @aktuellesdatum + 7 END
        IF (@AktuelleWoche = 2)
        BEGIN SET @Datum = @aktuellesdatum  END
        IF (@AktuelleWoche = 3)
        BEGIN SET @Datum = @aktuellesdatum - 7 END
        IF (@AktuelleWoche = 4)
        BEGIN SET @Datum = @aktuellesdatum - 14 END
        IF (@AktuelleWoche = 5)
        BEGIN SET @Datum = @aktuellesdatum - 21 END
    END
    IF (@Woche = 3)
    BEGIN
        IF (@AktuelleWoche = 1)
        BEGIN SET @Datum = @aktuellesdatum + 14 END
        IF (@AktuelleWoche = 2)
        BEGIN SET @Datum = @aktuellesdatum + 7 END
        IF (@AktuelleWoche = 3)
        BEGIN SET @Datum = @aktuellesdatum END
        IF (@AktuelleWoche = 4)
        BEGIN SET @Datum = @aktuellesdatum - 7 END
        IF (@AktuelleWoche = 5)
        BEGIN SET @Datum = @aktuellesdatum - 14 END
    END
    IF (@Woche = 4)
    BEGIN
        IF (@AktuelleWoche = 1)
        BEGIN SET @Datum = @aktuellesdatum + 21 END
        IF (@AktuelleWoche = 2)
        BEGIN SET @Datum = @aktuellesdatum + 14 END
        IF (@AktuelleWoche = 3)
        BEGIN SET @Datum = @aktuellesdatum + 7 END
        IF (@AktuelleWoche = 4)
        BEGIN SET @Datum = @aktuellesdatum END
        IF (@AktuelleWoche = 5)
        BEGIN SET @Datum = @aktuellesdatum - 7 END
    END
    IF (@Woche = 5)
    BEGIN
        IF (@AktuelleWoche = 1)
        BEGIN SET @Datum = @aktuellesdatum + 28 END
        IF (@AktuelleWoche = 2)
        BEGIN SET @Datum = @aktuellesdatum + 21 END
        IF (@AktuelleWoche = 3)
        BEGIN SET @Datum = @aktuellesdatum + 14 END
        IF (@AktuelleWoche = 4)
        BEGIN SET @Datum = @aktuellesdatum + 7 END
        IF (@AktuelleWoche = 5)
        BEGIN SET @Datum = @aktuellesdatum END
    END

    Select  CONVERT(date, DATEADD(wk, DATEDIFF(wk, 0, @Datum), - 1)) as startdatum,
               CONVERT(date, DATEADD(wk, DATEDIFF(wk, 0, @Datum), 5)) as enddatum

    RETURN

1voto

blue Punkte 568

Ich habe den Code, den Valex gegeben hat, modifiziert, um die genaue Ausgabe zu erhalten, die ich benötigt habe.

CREATE PROCEDURE dbo.SPReturnStartEndDateOfSpecifiedWeek
    @Week int,
    @P_startdate DateTime OUTPUT,
    @P_enddate DateTime OUTPUT
AS
    /* SET NOCOUNT ON */

    with C(i) as 
    ( 
      select CAST((DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) as datetime) i
      UNION ALL
      select DATEADD (day,1,i) i from C 
      where DATEADD (day,1,i)

0voto

Ankit Suhail Punkte 1965

Du kannst dies ausprobieren, um das Start- oder Enddatum der Woche zu erhalten. Gib einfach ein Datum an, für das du die Daten finden möchtest.

Die Logik ist ganz einfach: Hol dir das Start- und Enddatum der Woche und überprüfe dann, ob das Startdatum größer ist als das Monatsdatum. Wenn ja, nimm das Monatsdatum als Startdatum der Woche, sonst das Startdatum der Woche.

Spiel ein wenig herum, um das zu bekommen, was du willst Hier ist der Code:

DECLARE @date datetime
SET @date = '2013-01-30'
DECLARE @startdate datetime
DECLARE  @enddate datetime
DECLARE @MonthStart datetime
Declare @MonthEnd datetime

SET @startdate = DATEADD(wk, DATEDIFF(wk, 6, @date), 6) 
SET @enddate =  DATEADD(dd,6, DATEADD(wk, DATEDIFF(wk, 6, @date), 6))
SET @monthStart = CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@date)-1),@date),101)
SET @MonthEnd =CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@date))),DATEADD(mm,1,@date)),101)

--select @startdate wstart,@MonthStart monthstart,@enddate wend,@MonthEnd monthend
select  
[date] =  @date
,[week] = DATEPART(wk,@date)
,[WeekStartDate] = Case
                        WHEN @startdate <= @MonthStart then @MonthStart else @startdate  
                    END
,[WeekEndDate] = Case
                        WHEN @enddate > @MonthEnd then @MonthEnd else @enddate   
                    END

schau hier:

Fiddle

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X