SQL在开始和结束日期中分别显示小时数
我需要帮助来创建查询。我的问题是我有一个开始日期和结束日期,需要将其分为60分钟一组SQL在开始和结束日期中分别显示小时数,sql,Sql,我需要帮助来创建查询。我的问题是我有一个开始日期和结束日期,需要将其分为60分钟一组 DECLARE @STARTDATE AS SMALLDATETIME DECLARE @ENDDATE AS SMALLDATETIME SET @STARTDATE = '2012-11-21 11:03:00' SET @ENDDATE = '2012-11-21 13:04:00' 我需要报税表: Hour, Time 11 , 57 12 , 60 13 , 04 我不确定我是否理解您的意
DECLARE @STARTDATE AS SMALLDATETIME
DECLARE @ENDDATE AS SMALLDATETIME
SET @STARTDATE = '2012-11-21 11:03:00'
SET @ENDDATE = '2012-11-21 13:04:00'
我需要报税表:
Hour, Time
11 , 57
12 , 60
13 , 04
我不确定我是否理解您的意思,但这将以60分钟的间隔返回您开始日期后的小时和分钟
DECLARE @STARTDATE AS SMALLDATETIME
DECLARE @ENDDATE AS SMALLDATETIME
DECLARE @time AS TABLE(id int identity(1,1), [hour] int, [time] int)
SET @STARTDATE = '2012-11-21 11:03:00'
SET @ENDDATE = '2012-11-21 13:04:00'
WHILE @STARTDATE < @ENDDATE
BEGIN
SELECT @STARTDATE = DATEADD(MINUTE,60,@STARTDATE)
INSERT INTO @time (hour,time)
VALUES(DATEPART(HOUR,@STARTDATE),DATEPART(MINUTE,@STARTDATE))
END
SELECT * FROM @time
你可以分三部分来做。第一件是第一个小时,60减去分钟值,第二件是开始+1和结束之间所有小时的时间=60,第三件是结束分钟 然后将它们插入临时表中,就像abstractChaos所做的那样 像AbstractChaos一样插入临时表:
DECLARE @STARTDATE AS SMALLDATETIME
DECLARE @ENDDATE AS SMALLDATETIME
DECLARE @TIME AS TABLE(id INT IDENTITY(1,1), [HOUR] INT, [TIME] INT)
SET @STARTDATE = '2012-11-21 11:03:00'
SET @ENDDATE = '2012-11-21 13:04:00'
INSERT INTO @TIME (HOUR,TIME)
VALUES (datepart(HOUR,@startdate) ,60 - datepart(MINUTE,@startdate) )
WHILE @STARTDATE < @ENDDATE
BEGIN
SELECT @STARTDATE = DATEADD(MINUTE,60,@STARTDATE)
INSERT INTO @TIME (HOUR,TIME)
VALUES(datepart(HOUR,@STARTDATE) , 60)
END
INSERT INTO @TIME (HOUR,TIME)
VALUES(datepart(HOUR,@enddate) , datepart(MINUTE,@startdate))
您可以使用递归CTE。例如:
declare @startDate datetime = '2012-11-21 22:05:00'
declare @endDate datetime = '2012-11-22 01:06:00'
; with TimeList as
(
select @startDate as dt
union all
select dateadd(hour, 1, dateadd(hour, datediff(hour, 0, dt), 0))
from TimeList
where dateadd(hour, 1, dt) < @endDate
)
select dt
from TimeList
union all
select @endDate
片段dateaddhour、datediffhour、0、dt、0从日期中删除小时和分钟。它是通过计算自日期0起的小时数,然后将该小时数添加到日期0来实现的
您可能希望所需的输出与示例@startdate和@enddate时间相匹配。还有,时间栏是什么?以60为例,分或秒是没有意义的。您使用的是哪个版本的SQL Server?LittleBobbyTables,我认为它确实匹配。他不想要时间戳,他想要日期之间的分钟数。11,57意味着离12:00还有57分钟。如果开始日期或结束日期正好在小时,你想返回什么?-1作为工会的一部分,你不能使用。它甚至不会解析。这是一个好的开始,但中间的时间必须四舍五入。即13:00而不是13:03。结果中还应包括结束日期。