需要由圆形的时间或日期数字在SQL Server
问题描述:
计算我有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)
或每天
等
任何建设性的建议将受到欢迎。
答
您可以使用相同的技术来舍入任何日期间隔。这依赖于整数除法
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;
答
假设,你的时间列名为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
这非常酷,而且完成此操作的方式非常简单。我必须说,我希望有内在的东西能够实现它,但是,嘿,你的方法能做到。 – 2015-04-17 20:05:51