【问题标题】:Update datetime timestamp minute value更新日期时间时间戳分钟值
【发布时间】:2015-08-13 12:53:14
【问题描述】:

我们的数据记录器记录了一些不可处理的数据。
记录器正在记录 10 分钟的平均值。
由于制造商设备的错误,它记录了一些带有跳跃分钟值的时间戳,如下所示

plantid                                 Value               Timestamp  
1F617EDE-7B11-416A-B8D1-FDD566020E13    1.10000002384186    2013-10-26 06:02:00.000
1F617EDE-7B11-416A-B8D1-FDD566020E13    0.800000011920929   2013-10-26 08:56:00.000

如您所见,第一条记录是 02,第二条记录是 56 分钟。 我必须将这些值修复为 0(在第 1 行)和 50 在第二行,以使数据可用于进一步处理和分析。所以 10 分钟的值。

我尝试如下

DECLARE @ttest DATETIME = '2013-10-26 08:56:00.000'
SELECT @ttest
SET @ttest = Dateadd(minute,-DATEPART(MINUTE, @ttest),@ttest)
SELECT @ttest

但结果将是 2013-10-26 08:00:00.000,因为我计算的是负 56,但我需要计算负 6

那么我怎样才能只减去单个分钟值 6 而不是 56

【问题讨论】:

    标签: sql tsql dateadd datepart


    【解决方案1】:

    您可以使用modulo %10 获取个位数的分钟值:

    Dateadd(minute, -DATEPART(MINUTE, @ttest) % 10, @ttest)
    

    Modulo 返回除法的余数,因此在 56%10 的情况下,余数将为 6。

    如果您也需要删除秒/毫秒/纳秒,一种方法是链接多个 dateadd 操作,尽管我怀疑可能有更好的方法。

    【讨论】:

    • 如果时间戳也包含秒和毫秒怎么办?看来 OP 想要截断其余部分。
    • @TimSchmelter 那么毫秒或秒数将被保留并且必须被截断;也许将日期时间转换为浮点数并进行算术运算会更好。 OP 只谈论跳跃分钟,所以在这种特定情况下它可能不是问题。
    • @TimSchmelter 也许您想添加另一个解决该案例的答案以更加清晰?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 2022-01-16
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多