Sql server 设定一个比实际时间更长的营业时间

Sql server 设定一个比实际时间更长的营业时间,sql-server,date,datetime,sql-server-2017,Sql Server,Date,Datetime,Sql Server 2017,我有一个日期时间维度,日期如下: 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-1

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

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
由于systemtime的原因,我需要将我的工作时间改为6点开始,但我如何做到这一点?我可以用硬编码的值创建一个诱人的连接,但一定有更简单的方法吗

所需结果:

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和 时间维度。这不能满足我的要求,因为我有很多 更多关于我的datetime维度的业务规则


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

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


更好的长期解决方案可能是基于原始日期时间信息,将日期小时列设置为计算列。请使用@Larnu的答案作为一种方法。

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

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

更好的长期解决方案可能是基于原始日期时间信息,将日期小时列设置为计算列。请使用@Larnu的答案找到一种方法。

猜测一下

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

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

数字5以0开头,除此之外,其余的都可以,谢谢你的支持help@Thomas对不起,我已经修好了。非常感谢-这也是一个很好的解决方案:)感谢5号以0开头,除此之外,其余的都可以-谢谢你的帮助help@Thomas对不起,我已经修好了。非常感谢-这也是一个很好的解决方案:)谢谢你,汉克斯,我刚刚给你写了一封关于datepart的评论。我不知道为什么我自己没有想到这一点。我要回家了-谢谢你的帮助谢谢,我刚刚给你写了一封关于datepart的评论信。我不知道为什么我自己没有想到这一点。我要回家了,谢谢你的帮助