sql-server - T-SQL DateDiff - 按 "full hours ago"分区,而不是 "times minutes turned 00 since"

标签 sql-server tsql 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

当前查询:

SELECT TimeStamp, DATEDIFF(HOUR, TimeStamp, CURRENT_TIMESTAMP) AS Diff FROM ...

结果:

    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

我用 +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)

最佳答案

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

 SELECT DATEDIFF(minute, '2010-07-20 06:00', GETDATE())/60

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

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

SELECT TimeStamp, (DATEDIFF(minute, TimeStamp, CURRENT_TIMESTAMP) /60) AS Diff FROM ...

关于sql-server - T-SQL DateDiff - 按 "full hours ago"分区,而不是 "times minutes turned 00 since",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289547/

相关文章:

sql - 如果存储过程中参数为空,则选择全部

java - 在 SimpleDateFormat 中使用 a 和 aaa 有什么区别

python datetime以毫秒精度 float

sql-server - 如何调试Entity Framework Code First数据库部署错误?

sql-server - SQL 服务器 : Convert nulls into values when inserting fails - can I force this?

c# - 与 Azure 同步时如何不违反此主键?

c# - 在一个表单中声明 SqlConnection

c# - SQL 代码连接到一个由逗号分隔的键引用的表,并对其中的数据求和

sql-server - 是否可以使用名称获取存储过程的定义(无需查看对象资源管理器)

c# - 获取完整的英文月份名称