2012-01-04 21 views
6

計算我有2分數據列在SQL女士2008需要由圓形的時間或日期數字在SQL Server

唯一標識符列作爲ID和與像如下幾個結果的日期時間列。

2011-11-06 18:02:18.030 
2011-11-06 18:02:18.373 
2011-11-06 18:02:57.560 
2011-11-06 18:02:58.593 
2011-11-06 18:03:01.717 
2011-11-06 18:03:02.373 
2011-11-06 18:03:03.407 

除了ID列的複雜性。 我只是在每

minutes(1,5,10,15,30) 
hours (1,2) 
days(1,5,10) 
months(1,2) 

結果應地板或分組基於OM間隔的數據感興趣,否則,產生每間隔 只有1獨特如下

2011-11-06 18:02:00 (1 Minute) 
2011-11-06 18:03:00 (1 Minute) 
2011-11-06 18:04:00 (1 Minute) 
2011-11-06 18:05:00 (1 Minute) 
2011-11-06 18:06:00 (1 Minute) 

或每天

​​

任何建設性的建議將受到歡迎。

回答

25

您可以使用相同的技術來舍入任何日期間隔。這依賴於整數除法

SELECT 
    DATEADD(minute, DATEDIFF(minute, 0, foo), 0),    -- whole minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/5 * 5, 0),  -- 5 minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/10 * 10, 0), -- 10 minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/15 * 15, 0), -- 15 minute 
    DATEADD(minute, DATEDIFF(minute, 0, foo)/30 * 30, 0), -- 30 minute 

    DATEADD(hour, DATEDIFF(hour, 0, foo), 0),     -- whole hour 
    DATEADD(hour, DATEDIFF(hour, 0, foo)/2 * 2, 0),   -- 2 hour 

    DATEADD(day, DATEDIFF(day, 0, foo), 0),     -- whole day 
    DATEADD(day, DATEDIFF(day, 0, foo)/5 * 5, 0),   -- 5 day 
    DATEADD(day, DATEDIFF(day, 0, foo)/10 * 10, 0),   -- 10 day 

    DATEADD(month, DATEDIFF(month, 0, foo), 0),    -- whole month 
    DATEADD(month, DATEDIFF(month, 0, foo)/2 * 2, 0)   -- 2 month 
FROM 
    @dates; 
+0

這非常酷,而且完成此操作的方式非常簡單。我必須說,我希望有內在的東西能夠實現它,但是,嘿,你的方法能做到。 – 2015-04-17 20:05:51

1

假設,你的時間列名爲mydatetime

對於分鐘

如果只地板

SELECT DISTINCT DATEADD(MINUTE, DATEPART(minute, mydatetime), DATEADD(HOUR, DATEPART(HOUR, mydatetime), CONVERT(varchar, mydatetime, 112))) 
from YourTable 

如果圓潤,那麼它是非常簡單

select DISTINCT CAST(mydatetime as smalldatetime) 
from YourTable 

對於在剛剛同樣的方式小時

select DISTINCT CAST(CONVERT(varchar, mydatetime, 112) as date) 
from YourTable 

幾個月

select DISTINCT DATEADD(DAY, 1-DAY(mydatetime), CONVERT(varchar, mydatetime, 112)) 
from YourTable 
+0

那麼其他區間呢?另請參閱http://stackoverflow.com/a/1177529/27535關於執行此操作的最佳方法 – gbn 2012-01-04 07:06:38

+0

請參閱@gbn答案,其更具普遍性 – 2012-01-04 07:36:26