actionbrowser.com
Ein paar Zeilen SQL, um Daten nach Woche, Monat, Quartal und Jahr gruppiert zurückzugeben. Ziel ist es, Daten summiert und gruppiert nach Datum zurückzugeben. Das Datum soll dabei ein DateTime bleiben. Angenommen, wir haben folgende Tabelle mit Daten: Id Date Value 1 2014-10-01 5 2 3 2014-10-06 76 4 2014-10-08 … 433 2015-04-30 6 Gruppierung nach Monat Um nun die Daten gruppiert nach Monat auszugeben und dabei das Datum als DateTime beizubehalten kann man das Datum im Select z. B. auf den 1. SQL: Versuch, Jahr und Monat aus einem Datum zu extrahieren - SQL, Oracle. des Monats setzen. Select DateAdd(Month, DateDiff(Month, 0, Date), 0) From Table Die Gruppierung könnte dann so aussehen: Select DateAdd(Month, DateDiff(Month, 0, Date), 0) AS Date, Sum(Value) as Value From [Table] Group by DateAdd(Month, DateDiff(Month, 0, Date), 0) Order by Date 233 2014-11-01 345 2014-12-01 75 Analog funktioniert das auch für andere Granularitäten. Gruppierung nach Jahr Hier setzen wir das Datum auf den 1. 1. des Jahres. DateAdd(year, DateDiff(year, 0, Date), 0) AS Date, FROM [Table] Group by DateAdd(year, DateDiff(year, 0, Date), 0) 2014-01-01 5675 2015-01-01 10964 Gruppierung nach Quartal Hier sorgt der datepart "quarter" für das korrekte Ergebnis.
Erstellen Sie mit T-SQL ein Datum aus Tag, Monat und Jahr Ich versuche, ein Datum mit einzelnen Teilen wie 12, 1, 2007 in eine Datums- / Uhrzeitangabe in SQL Server 2005 zu konvertieren. Ich habe Folgendes versucht: CAST ( DATEPART ( year, DATE)+ '-' + DATEPART ( month, DATE) + '-' + DATEPART ( day, DATE) AS DATETIME) Dies führt jedoch zu einem falschen Datum. Was ist der richtige Weg, um die drei Datumswerte in ein geeignetes Datum / Uhrzeit-Format umzuwandeln? Antworten: Versuche dies: Declare @ DayOfMonth TinyInt Set @ DayOfMonth = 13 Declare @ Month TinyInt Set @ Month = 6 Declare @ Year Integer Set @ Year = 2006 -- ------------------------------------ Select DateAdd ( day, @ DayOfMonth - 1, DateAdd ( month, @ Month - 1, DateAdd ( Year, @ Year-1900, 0))) Es funktioniert auch, hat den zusätzlichen Vorteil, dass keine Zeichenfolgenkonvertierungen durchgeführt werden. Es ist also eine reine arithmetische Verarbeitung (sehr schnell) und hängt nicht von einem Datumsformat ab. Microsoft SQL Server – Gruppierung nach Datum (Snippets) – Computerhalbwissen. Dies nutzt die Tatsache, dass die interne Darstellung von SQL Server für datetime- und smalldatetime-Werte zwei ist Teilewert, dessen erster Teil eine Ganzzahl ist, die die Anzahl der Tage seit dem 1. Januar 1900 darstellt, und deren zweiter Teil ein Dezimalbruch ist, der den Bruchteil eines Tages (für die Zeit) darstellt --- Also der ganzzahlige Wert 0 (Null)) übersetzt immer direkt in den Mitternachtsmorgen des 1. Januar 1900... oder dank des Vorschlags von @brinary Select DateAdd ( yy, @ Year-1900, DateAdd ( m, @ Month - 1, @ DayOfMonth - 1)) Bearbeitet im Oktober 2014.
Sie können auch verwenden select DATEFROMPARTS ( year, month, day) as ColDate, Col2, Col3 From MyTable Where DATEFROMPARTS ( year, month, day) Between @ DateIni and @ DateEnd Funktioniert in SQL seit Version 2012 und AzureSQL Es ist sicherer und ordentlicher, einen expliziten Ausgangspunkt '19000101' zu verwenden. create function dbo. fnDateTime2FromParts (@ Year int, @ Month int, @ Day int, @ Hour int, @ Minute int, @ Second int, @ Nanosecond int) returns datetime2 as begin -- Note!