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 APPLYeines Alias für eine solche Funktion?
minutewahrscheinlich besser abschneiden als second. Aktualisierte meine Frage :)
CROSS APPLY:)
SELECT FieldName FROM <table> CROSS APPLY (SELECT <calculation) AliasName(FieldName) GROUP BY FieldName