Die Antwort auf die andere Frage ist ein bisschen ein Hack, um Probleme mit verschiedenen Datumsformaten in verschiedenen Datenbanken zu verhindern. Grundsätzlich, wenn wir alles als ein Datum behandeln, müssen wir uns keine Gedanken über die verschiedenen Möglichkeiten machen, ein Datum zu formatieren.
Hier ist eine Aufschlüsselung, wie die andere Antwort funktioniert:
dateadd(quarter, @qq, 0)
Es erstellt zunächst ein Datum aus der Basis des Quartals 0 als Datum Basis. Dies erzeugt einen von 4 Werten: 1/1/1900, 4/1/1900, 7/1/1900 und 10/1/1900 (dies ändert sich wahrscheinlich basierend auf der Lokalität des Servers, ich benutze US) .
dateadd(year, @year-1900, [date from the quarter dateadd function]
Der zweite Teil das Datum aus dem ersten Teil nimmt, legt fest, wie viele Jahre seit 1900 vergangen sind, und fügt hinzu, dass viele Jahre zum ersten Termin. Wenn das Jahr, das verwendet wird, 2016 ist, werden 116 Jahre hinzugefügt. Dies ergibt einen der folgenden 4 Werte: 01.01.2016, 01.04.2016, 01.07.2016, 01.10.2016 (wieder US-Standort).
dateadd(day, -1, [date from previous function]
Der letzte Teil ist der erste Tag von jedem Quartal und wandelt es in den letzten Tag eines jeden Quartals. Dies ist möglicherweise kein notwendiger Teil der Antwort für Sie.
Wie @Gordon Linoff antwortete, ist ein sauberer Ansatz die Funktion datefromparts, die nur in SQL Server 2012+ verfügbar ist.
Also, in Ihrem Ort, zu welcher Zeit ändert sich das Quartal, ist es jedes Jahr dasselbe? Ist es dasselbe wie TSQLs Interpretation eines Quartals? – Jodrell