【发布时间】:2019-10-18 09:07:11
【问题描述】:
我需要获取在 TSQL 中的两个日期之间发生了多少特定小时。一些例子:
以下将给出结果 = 1
declare @date1 datetime = '2019-10-01 00:00:00.000';
declare @date2 datetime = '2019-10-02 00:00:00.000';
以下将给出结果 = 0,因为中间有 0 个 4AM
declare @date1 datetime = '2019-10-01 05:00:00.000';
declare @date2 datetime = '2019-10-02 00:00:00.000';
以下将给出结果 = 2,因为中间有 2 个 4AM
declare @date1 datetime = '2019-10-01 03:00:00.000';
declare @date2 datetime = '2019-10-02 05:00:00.000';
以下将给出结果 = 2,因为已经有 2 个凌晨 4 点,即使它们只是在凌晨 4:00 时间
declare @date1 datetime = '2019-10-01 04:00:00.000';
declare @date2 datetime = '2019-10-02 04:00:00.000';
我尝试过这样的事情......但它给出的答案不正确
DECLARE @startdate AS DATETIME = '2019-10-01 03:00:00.000'
DECLARE @enddate AS DATETIME = '2019-10-02 00:00:00.000'
DECLARE @hour int = 4
SELECT DATEDIFF(HOUR, @startdate, @endDate) / 24
+ 1
+ CASE WHEN DATEPART(HOUR, @startdate) <= @hour AND
DATEPART(HOUR, @endDate) >= @hour
THEN 0
ELSE -1
END
谁能给我一些启发,我将不胜感激
【问题讨论】:
-
为什么是
4 AM?那是时区偏移吗?在这种情况下,您不应该存储值datetimeoffset,或者至少在计算之前将它们转换为正确的偏移量吗?
标签: sql sql-server tsql datetime