T-SQL则DateDiff - 由"全个小时前"分区,而不是"时代分钟后变成00,因为"

Tom*_*han 5 t-sql sql-server datetime datediff

我有一个时间戳表,我想这个表划分为长达一小时的间隔,起始于现在和倒退了几个小时.我无法得到我需要与T-SQL的结果DATEDIFF功能,因为它计算的时间分针经过12两个日期之间的-我想他们的分针传递次数它现在之间时间戳,现在.

在T-SQL中有一种直接的方法吗?

更新: 为了应对的意见,这里的一些样本数据,目前我使用的查询和我得到的结果,以及我想要的结果.

样本数据:

TimeStamp
*********
2010-07-20 11:00:00.000
2010-07-20 10:44:00.000
2010-07-20 10:14:00.000
2010-07-20 11:00:00.000
2010-07-20 11:40:00.000
2010-07-20 10:16:00.000
2010-07-20 13:00:00.000
2010-07-20 12:58:00.000
Run Code Online (Sandbox Code Playgroud)

当前查询:

SELECT TimeStamp, DATEDIFF(HOUR, TimeStamp, CURRENT_TIMESTAMP) AS Diff FROM ...
Run Code Online (Sandbox Code Playgroud)

结果:

    TimeStamp                   Diff
    *********                   ****
    2010-07-20 11:00:00.000     2
    2010-07-20 10:44:00.000     3
    2010-07-20 10:14:00.000     3
    2010-07-20 11:00:00.000     2
    2010-07-20 11:40:00.000     2
    2010-07-20 10:16:00.000     3
    2010-07-20 13:00:00.000     0
    2010-07-20 12:58:00.000     1

我宁愿拥有的东西:

    -- The time is now, for the sake of the example, 13:40

    TimeStamp                   Diff
    *********                   ****
    2010-07-20 11:00:00.000     3 -- +1
    2010-07-20 10:44:00.000     3
    2010-07-20 10:14:00.000     4 -- +1
    2010-07-20 11:00:00.000     3 -- +1
    2010-07-20 11:40:00.000     2 or 3 -- edge case, I don't really care which
    2010-07-20 10:16:00.000     4 -- +1
    2010-07-20 13:00:00.000     1 -- +1
    2010-07-20 12:58:00.000     1

我用a标记了改变的结果+1.另外,我真的不在乎这是0索引还是1索引,但基本上,如果它现在是13:40我想要时间跨度得到相同的值是

    12:40-13:40    1 (or 0)
    11:40-12:40    2 (or 1)
    10:40-11:40    3 (or 2)
    09:40-10:40    4 (or 3)

Ben*_*son 7

你能不能只使用DATEDIFF(minute,..然后将结果除以60并取整数值.例如

 SELECT DATEDIFF(minute, '2010-07-20 06:00', GETDATE())/60
Run Code Online (Sandbox Code Playgroud)

我相信这将被隐式地转换为int,因为datediff返回一个int,它给出整个小时没有舍入.

要使用您更新的帖子中的确切查询:

SELECT TimeStamp, (DATEDIFF(minute, TimeStamp, CURRENT_TIMESTAMP) /60) AS Diff FROM ...
Run Code Online (Sandbox Code Playgroud)