Sql 如何比较存储过程中while循环中的时间?
请帮我这个忙,我一直在做条件工作,得到的时间只有24小时以内 所以我有类似的东西。谁能帮我一下,或者告诉我条件是否正确 my@DisplayStartTime=11:00PM 基本上我的@nextStartTime=11:00PM 以下是示例:Sql 如何比较存储过程中while循环中的时间?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,请帮我这个忙,我一直在做条件工作,得到的时间只有24小时以内 所以我有类似的东西。谁能帮我一下,或者告诉我条件是否正确 my@DisplayStartTime=11:00PM 基本上我的@nextStartTime=11:00PM 以下是示例: 如果要在时间段[@StartDate,@EndDate]内生成所有日期时间值,则可以使用: 然后是一个简单的SELECT语句 DECLARE @StartDate DATETIME2(0), @EndDate DATETIME2(0), @Frequen
如果要在时间段[@StartDate,@EndDate]内生成所有日期时间值,则可以使用: 然后是一个简单的SELECT语句
DECLARE @StartDate DATETIME2(0), @EndDate DATETIME2(0), @Frequency TINYINT
SELECT @StartDate = '2015-04-17 11:00:00',
@EndDate = '2015-04-17 11:15:00',
@Frequency = 2; -- Minutes
SELECT n.Num,
DATEADD(MINUTE, n.Num*@Frequency, @StartDate) AS RangeStart
/*,
CASE
WHEN DATEADD(MINUTE, (n.Num + 1)*@Frequency, @StartDate) > @EndDate
THEN @EndDate
ELSE DATEADD(MINUTE, (n.Num + 1)*@Frequency, @StartDate)
END AS RangeEnd
*/
FROM dbo.Numbers n
WHERE n.Num <= DATEDIFF(MINUTE, @StartDate, @EndDate) / @Frequency
/*
Num RangeStart RangeEnd
----------- --------------------------- ---------------------------
0 2015-04-17 11:00:00 2015-04-17 11:02:00
1 2015-04-17 11:02:00 2015-04-17 11:04:00
2 2015-04-17 11:04:00 2015-04-17 11:06:00
3 2015-04-17 11:06:00 2015-04-17 11:08:00
4 2015-04-17 11:08:00 2015-04-17 11:10:00
5 2015-04-17 11:10:00 2015-04-17 11:12:00
6 2015-04-17 11:12:00 2015-04-17 11:14:00
7 2015-04-17 11:14:00 2015-04-17 11:15:00
*/
我相信你不用光标也能做到这一点。你能告诉我们你想做什么吗?你能提供样本数据和预期结果吗?哦,我需要一个游标来循环。因此,如果我在@intflag上做点什么,它基本上可以正常工作。我们可以得到样本数据吗?你想要什么样的准确输出?样本数据已经编辑过了..这就是我所期望的。我需要一个循环在今天晚上11点到明天晚上11点之间的条件。我们可以这样做吗?可能重复
SET NOCOUNT ON
GO
-- DROP TABLE dbo.Numbers
CREATE TABLE dbo.Numbers (
Num INT IDENTITY(0,1),
CONSTRAINT PK_Numbers_Num PRIMARY KEY (Num)
);
GO
-- It generates all values from 0 to 9999
INSERT dbo.Numbers DEFAULT VALUES
GO 10000 -- You can insert more numbers if diff. between those two date/time values is greather than 13 days (I used a frecv. of 2 minutes to computes this maximum limit)
DECLARE @StartDate DATETIME2(0), @EndDate DATETIME2(0), @Frequency TINYINT
SELECT @StartDate = '2015-04-17 11:00:00',
@EndDate = '2015-04-17 11:15:00',
@Frequency = 2; -- Minutes
SELECT n.Num,
DATEADD(MINUTE, n.Num*@Frequency, @StartDate) AS RangeStart
/*,
CASE
WHEN DATEADD(MINUTE, (n.Num + 1)*@Frequency, @StartDate) > @EndDate
THEN @EndDate
ELSE DATEADD(MINUTE, (n.Num + 1)*@Frequency, @StartDate)
END AS RangeEnd
*/
FROM dbo.Numbers n
WHERE n.Num <= DATEDIFF(MINUTE, @StartDate, @EndDate) / @Frequency
/*
Num RangeStart RangeEnd
----------- --------------------------- ---------------------------
0 2015-04-17 11:00:00 2015-04-17 11:02:00
1 2015-04-17 11:02:00 2015-04-17 11:04:00
2 2015-04-17 11:04:00 2015-04-17 11:06:00
3 2015-04-17 11:06:00 2015-04-17 11:08:00
4 2015-04-17 11:08:00 2015-04-17 11:10:00
5 2015-04-17 11:10:00 2015-04-17 11:12:00
6 2015-04-17 11:12:00 2015-04-17 11:14:00
7 2015-04-17 11:14:00 2015-04-17 11:15:00
*/