SQL Server 2008 wählen Sie die Daten nur zwischen Monat und Jahr

Möchte ich wählen Sie Daten zwischen zwei Datum, ohne Tag

Einen Eingabe-Beispiel:

start-Monat: 9 , Anfang Jahr: 2011

Ende Monat: 3, Ende Jahr: 2012

Ich denke, es gibt zwei Wege, dies zu tun.

Die erste ist, konvertieren start-Monat und start-Jahr-bis-Datum wie 2011-09-01 konvertieren und letzten Tag der 2012-03-31, aber dieses erfordert die Berechnung des letzten Tages der Ende Monat. Diese erhaltene Datum können wir eine Funktion zwischen den einzelnen, für die WHERE-Klausel (aber, ist die CONVERT-Funktion zuverlässig?)

Die zweite Lösung ist die Verwendung der DATEPART Funktion wie im folgenden code:

Ich versuche zu erklären: wenn Ende Jahr gleich dem ersten Jahr, dann der Monat muss zwischen den start-und end-Monate; else if den letzten Monaten größer ist als in den ersten Jahren, wenn andere von der ersten und letzten Jahr, ich nehme alles dazwischen; sonst, wenn das Letzte Jahr, der Monat muss kleiner als oder gleich den letzten Monat, wenn das erste Jahr, Monat muss größer als oder gleich den letzten Monat

Können Sie mir helfen, tun Sie dies in der beste Weg? Korrekt ist, die Lösung, die ich angenommen?

declare @IndDebitoCredito bit,@ProgTributo int,@mi as integer,@ai as integer,@mf as integer,@af as integer,@IDAnagrafica varchar(5)
select @mi = 01,@ai = 2011,@mf = 12,@af = 2011,@IDAnagrafica = 'DELEL',@IndDebitoCredito = 1
select distinct rrd.IDTributo
    from TBWH_Delega d
    --inner join TBWH_SezioneDelega sd on d.IDDelega = sd.IDDelega
    inner join TBWH_Rigo rd on rd.IDDelega = d.IDDelega
    inner join TBWH_RataRigo rrd on rrd.IDRigo = rd.IDRigo 
    where
    (
        DATEPART(MM,d.DataDelega)<=@mf and 
        DATEPART(MM,d.DataDelega)>=@mi and 
        DATEPART(YYYY,d.DataDelega)=@ai and 
        @af = @ai
    ) 
    OR
    (
        --anno finale magg. anno iniziale
        @af > @ai AND
        ( 
            (   -- delega nell'intervallo
                DATEPART(YYYY,d.DataDelega)<@af AND 
                DATEPART(YYYY,d.DataDelega)>@ai
                -- DATEPART(MM,d.DataDelega)>=@mi 
            )
            OR
            (   -- delega limite destro
                DATEPART(YYYY,d.DataDelega)=@af AND 
                DATEPART(MM,d.DataDelega)<=@mf 
            )
            OR
            (   -- delega limite sinistro
                DATEPART(YYYY,d.DataDelega)=@ai AND 
                DATEPART(MM,d.DataDelega)>=@mi 
            )
        )
    )

GEHEN

  • Ich dachte zuerst, das endgültige " GO " war für uns: "Hier ist die Frage. Nun.. GEHEN!" 🙂
InformationsquelleAutor Lluthus | 2011-10-27
Schreibe einen Kommentar