Tôi đang cố gắng viết một truy vấn mà các nhóm ghi lại dựa trên phần ngày cục bộ chỉ của trường thời gian UTC.
Ví dụ: nếu bảng của tôi chứa 10/19/2012 2:00:00
, thì bảng đó sẽ được nhóm thành 10/18/2012
, vì giờ địa phương của tôi là EST (-5h) và tôi chỉ quan tâm đến phần ngày của trường.
Tôi biết tôi chỉ có thể sử dụng DateAdd(day, DateDiff(day, 0, MyDate), 0)
để lấy phần ngày chỉ từ trường datetime và tôi có thể sử dụng DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)
để chuyển đổi một datetime UTC thành giờ ngày cục bộ.
Nhưng kết hợp cả hai là xúc phạm tôi nghiêm trọng.
Có cách nào tốt hơn cách này để chỉ lấy phần Ngày của trường UTC DateTime, được chuyển đổi thành giờ địa phương, trong SQL Server 2005 không?
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
để bí danh một chức năng như thế này không?
minute
có lẽ sẽ hoạt động tốt hơn second
. Cập nhật câu hỏi của tôi :)
CROSS APPLY
gì :)
SELECT FieldName FROM <table> CROSS APPLY (SELECT <calculation) AliasName(FieldName) GROUP BY FieldName