Dies ist meine Funktion FirstDayInQtrSelect-Anweisung MSSQL
Dies ist die SQL-Abfrage
SELECT @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
, die diese Aussage erklären kann
Dies ist meine Funktion FirstDayInQtrSelect-Anweisung MSSQL
Dies ist die SQL-Abfrage
SELECT @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
, die diese Aussage erklären kann
Die DATEADD()
Funktion addiert oder subtrahiert ein bestimmtes Zeitintervall von einem Datum.
Syntax: DATEADD (Datumsteil, Zahl, Datum)
qq = quarter,
yy = Year
in Ihrer Frage das Datumsfeld ist repräsentativ als 0 oder -1 in der Datumsteil Syntax, SQL Server bezieht 0 als 1900-1901 -01 00: 00: 00.000 und -1 als 1 Tag vor 0 1899.12.31 00: 00: 00.000
so
select dateadd(qq,466,'1900-01-01 00:00:00.000') is the same as
SELECT DATEADD(qq, DATEDIFF(qq ,0, GETDATE()),0)
OR
SET @InsertDate = GETDATE()
SELECT DATEADD(qq, DATEDIFF(qq ,0, @InsertDate),0)
Jetzt wird 466 vom datediff(qq,0,GETDATE())
Abschnitt der Funktion abgeleitet. Laut Kalenderjahr gibt es zwischen 1900-01-01 00: 00: 00.000 466 Viertel und jetzt.
so in @day
erhalten Sie 2016-07-01 00:00:00.000
, wenn Ihr @InsertDate
Wert 2016-07-05 00:00:00.000
ist.
Ich glaube, das Ihre Unsicherheiten wird klar: https://stackoverflow.com/a/3945396/6492765
Grundsätzlich ist SELECT eine T-SQL-Methode zum Festlegen eines Werts für eine Variable, wobei die Magie in selectin ist g aus Joins oder anderen ausgewählten Konzepten direkt in Variablen. Mit Zuweisung 1 Wert nur 1 Variable, unterscheidet es sich nicht von SET, die in Ihrem Fall wäre:
SET @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
ordnen Sie den ersten Tag des laufenden Quartals auf variable @Day
Ich bin sicher, wir könnten es alle erklären. Was genau ist deine Frage? Gibt es eine Ausgabe, die Sie nicht erwarten würden? Haben Sie es mit einigen Beispieldaten getestet, um zu sehen, was es tut? –
ja ich habe es getestet und es funktioniert perfekt. aber ich kann die Logik hinter dieser Aussage nicht verstehen –