Benutzer mit den meisten Antworten
365 Tage (INT) vom aktuellen Dateum (DATETIME) im SQL abziehen!?

Frage
-
Hallo zusammen,
ich habe ein SQL im SSRS wo ich einen Zeitraum von bis einschränken möchte. ...where Datum between @Verlaufsstart and @bis..... läuft soweit. Jetzt möchte ich jedoch genau den Vorjahreszeitraum abfragen. Wieso gibt mir die Konvertierung einen Fehler aus, SSRS selber aber nicht bzw. wie muss das SQL korrekt lauten:
CONVERT(DATETIME,(CONVERT(INT,(@Verlaufsstart))-365))
Vielen Dank.
Gruß Chris
Antworten
-
Hallo Chris,
um einen bestimmten Bereich von einem Datum abzuziehen, empfiehlt sich DATEADD. In deinem Fall dann bspw. so:
SELECT DATEADD( d, -365, GETDATE() )
Wobei sich natürlich die Frage stellt, ob 365 hier für dich richtig wäre, wenn Du immer 1 Jahr zurück willst. In dem Fall wäre
SELECT DATEADD( YY, -1, GETDATE() )
wohl besser geeignet.
Im gesamten Statement würde das dann bspw. so aussehen:
SELECT ... FROM <Tabelle> WHERE <Datumsspalte> BETWEEN DATEADD( YY, -1, @Startdatum ) AND @Startdatum
HTH
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 25. April 2016 16:57
- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 26. April 2016 14:48
- Als Antwort markiert Aleksander Chalabashiev Montag, 2. Mai 2016 08:02
-
Servus!
Du kannst auch mit YEAR() und/oder GETDATE() arbeiten:
SELECT * FROM Tabelle WHERE YEAR(TERM) > (YEAR(GetDate())-1)
In dem Fall ist TERM die Datumsspalte. GetDate() gibt das Tagesdatum aus, ist aber von YEAR umklammert, d.h. es wird nur der Jahresanteil hiervon verwendet (also 2016). Im gleichen Atemzug wird -1 berechnet, also wird aus der 2016 ein 2015. Das YEAR bei TERM macht genach das gleiche: Aus dem Datumsfeld TERM das Jahr extrahieren.
Falls Dir YEAR zu "grob" ist, gibt es auch noch zig andere Möglichkeiten. Schau Dir auch noch DATEDIFF() an. Oder am besten gleich den "ultimativen Guide": http://www.insidesql.org/blogs/frankkalis/2010/08/19/der-ultimative-guide-fuer-die-datetime-datentypen
MCTS (70-642), MCP
- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 26. April 2016 14:48
- Als Antwort markiert Aleksander Chalabashiev Montag, 2. Mai 2016 08:02
Alle Antworten
-
Hallo Chris,
um einen bestimmten Bereich von einem Datum abzuziehen, empfiehlt sich DATEADD. In deinem Fall dann bspw. so:
SELECT DATEADD( d, -365, GETDATE() )
Wobei sich natürlich die Frage stellt, ob 365 hier für dich richtig wäre, wenn Du immer 1 Jahr zurück willst. In dem Fall wäre
SELECT DATEADD( YY, -1, GETDATE() )
wohl besser geeignet.
Im gesamten Statement würde das dann bspw. so aussehen:
SELECT ... FROM <Tabelle> WHERE <Datumsspalte> BETWEEN DATEADD( YY, -1, @Startdatum ) AND @Startdatum
HTH
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 25. April 2016 16:57
- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 26. April 2016 14:48
- Als Antwort markiert Aleksander Chalabashiev Montag, 2. Mai 2016 08:02
-
Servus!
Du kannst auch mit YEAR() und/oder GETDATE() arbeiten:
SELECT * FROM Tabelle WHERE YEAR(TERM) > (YEAR(GetDate())-1)
In dem Fall ist TERM die Datumsspalte. GetDate() gibt das Tagesdatum aus, ist aber von YEAR umklammert, d.h. es wird nur der Jahresanteil hiervon verwendet (also 2016). Im gleichen Atemzug wird -1 berechnet, also wird aus der 2016 ein 2015. Das YEAR bei TERM macht genach das gleiche: Aus dem Datumsfeld TERM das Jahr extrahieren.
Falls Dir YEAR zu "grob" ist, gibt es auch noch zig andere Möglichkeiten. Schau Dir auch noch DATEDIFF() an. Oder am besten gleich den "ultimativen Guide": http://www.insidesql.org/blogs/frankkalis/2010/08/19/der-ultimative-guide-fuer-die-datetime-datentypen
MCTS (70-642), MCP
- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 26. April 2016 14:48
- Als Antwort markiert Aleksander Chalabashiev Montag, 2. Mai 2016 08:02
-
Hallo zusammen,
vielen Dank für die schnelle Rückmeldungen. Hat wie gewünscht geklappt, aber das Thema datetime verfolgt mich mit den unterschiedlichen Ausprägungen immer wieder aufs Neue, daher ist der ultimative Guide-Link echt super Klasse!
Gruß Chris