【问题标题】:Set another Business hour than the time really is设置另一个营业时间,而不是实际时间
【发布时间】:2019-02-19 12:40:49
【问题描述】:

我有一个 DateTime 维度,日期如下:

Datetime                      Date hour
--------------------------------------
2026-01-01 00:00:00.0000000       24
2025-12-31 23:00:00.0000000       23
2025-12-31 22:00:00.0000000       22
2025-12-31 21:00:00.0000000       21
2025-12-31 20:00:00.0000000       20
2025-12-31 19:00:00.0000000       19
2025-12-31 18:00:00.0000000       18
2025-12-31 17:00:00.0000000       17
2025-12-31 16:00:00.0000000       16
2025-12-31 15:00:00.0000000       15
2025-12-31 14:00:00.0000000       14
2025-12-31 13:00:00.0000000       13
2025-12-31 12:00:00.0000000       12
2025-12-31 11:00:00.0000000       11
2025-12-31 10:00:00.0000000       10
2025-12-31 09:00:00.0000000       9
2025-12-31 08:00:00.0000000       8
2025-12-31 07:00:00.0000000       7
2025-12-31 06:00:00.0000000       6
2025-12-31 05:00:00.0000000       5
2025-12-31 04:00:00.0000000       4
2025-12-31 03:00:00.0000000       3
2025-12-31 02:00:00.0000000       2
2025-12-31 01:00:00.0000000       1

由于系统时间,我需要我的时间从 6 点开始,但我该怎么做?我可以用硬编码的值创建一个 temptable 并加入,但一定有更简单的方法吗?

期望的结果:

Datetime                      Date hour
--------------------------------------
2026-01-01 00:00:00.0000000       19
2025-12-31 23:00:00.0000000       18
2025-12-31 22:00:00.0000000       17
2025-12-31 21:00:00.0000000       16
2025-12-31 20:00:00.0000000       15
2025-12-31 19:00:00.0000000       14
2025-12-31 18:00:00.0000000       13
2025-12-31 17:00:00.0000000       12
2025-12-31 16:00:00.0000000       11
2025-12-31 15:00:00.0000000       10
2025-12-31 14:00:00.0000000       9
2025-12-31 13:00:00.0000000       8
2025-12-31 12:00:00.0000000       7
2025-12-31 11:00:00.0000000       6
2025-12-31 10:00:00.0000000       5
2025-12-31 09:00:00.0000000       4
2025-12-31 08:00:00.0000000       3
2025-12-31 07:00:00.0000000       2
2025-12-31 06:00:00.0000000       1
2025-12-31 05:00:00.0000000       24
2025-12-31 04:00:00.0000000       23
2025-12-31 03:00:00.0000000       22
2025-12-31 02:00:00.0000000       21
2025-12-31 01:00:00.0000000       20

还有关于我为什么不持有 DateDimension 和 时间维度。这不能满足我的要求,因为我有很多 更多关于我的日期时间维度的业务规则

【问题讨论】:

    标签: sql-server date datetime sql-server-2017


    【解决方案1】:

    猜测一下……

    UPDATE YourTable
    SET [Date hour] = IIF(DATEPART(HOUR,DATEADD(HOUR, -5, [datetime])) = 0,24,DATEPART(HOUR,DATEADD(HOUR, -5, [datetime]));
    

    【讨论】:

    • 谢谢,我刚刚写信给你关于日期部分的评论。我不知道为什么我自己没有想到这一点。我需要回家 - 感谢帮助
    【解决方案2】:

    鉴于您的 [Date hour] 列已经计算完毕,您可以尝试使用模数进行更新:

    UPDATE yourTable
    SET [Date hour] = 1 + ([Date hour] + 18) % 24;
    

    Demo

    更好的长期解决方案可能是根据原始日期时间信息将日期时间列设为计算列。请参阅@Larnu 的答案,了解一种方法。

    【讨论】:

    • 数字 5 以 0 开头,其余的都可以 - 感谢您的帮助
    • @Thomas 抱歉,我已经解决了。
    • 非常感谢 - 这也是一个很好的解决方案 :) 感谢它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    相关资源
    最近更新 更多