Ich versuche, eine Abfrage zu schreiben, die Datensätze basierend auf dem lokalen Datumsteil nur eines UTC-Datums- / Uhrzeitfelds gruppiert.
Wenn meine Tabelle beispielsweise enthält 10/19/2012 2:00:00
, sollte sie als gruppiert werden 10/18/2012
, da meine Ortszeit EST (-5h) ist und ich nur am Datumsteil des Felds interessiert bin.
Ich weiß, dass ich DateAdd(day, DateDiff(day, 0, MyDate), 0)
den Datumsteil nur aus dem Datum / Uhrzeit-Feld abrufen und DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)
eine UTC-Datum / Uhrzeit in eine lokale Datums- / Uhrzeitangabe konvertieren kann .
Aber die Kombination der beiden beleidigt mich ernsthaft.
Gibt es eine bessere Möglichkeit, in SQL Server 2005 nur den Datumsteil eines UTC DateTime-Felds abzurufen, das in die Ortszeit konvertiert wurde?
SELECT DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
, Count(*)
FROM MyTable
GROUP BY DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
CROSS APPLY
eines Alias für eine solche Funktion?
minute
wahrscheinlich besser abschneiden als second
. Aktualisierte meine Frage :)
CROSS APPLY
:)
SELECT FieldName FROM <table> CROSS APPLY (SELECT <calculation) AliasName(FieldName) GROUP BY FieldName