求SQL生成时段数据,最佳的方法。先谢谢各位!

cbolg 2009-04-15 02:35:06
求SQL生成时段数据
条件:
起始时间8:30
终止时间23:00
时段步长20分钟(或者为1至60分钟内任意变量数值)

结果:
由以上条件那么下生成时段数据如下:
时段
8:30
8:50
9:10
9:30
9:50
10:10
...
23:00
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
claro 2009-04-15
  • 打赏
  • 举报
回复
帮顶。
水族杰纶 2009-04-15
  • 打赏
  • 举报
回复
set nocount on
declare @start datetime
declare @end datetime
set @end='23:00 '
set @start='08:30'
declare @t table(dt datetime)
while @start<@end
begin
insert @t select @start
set @start=dateadd(mi,20,@start)
end
select convert(varchar(10),dt,108) from @t
/*
----------
08:30:00
08:50:00
09:10:00
09:30:00
09:50:00
10:10:00
10:30:00
10:50:00
11:10:00
11:30:00
11:50:00
12:10:00
12:30:00
12:50:00
13:10:00
13:30:00
13:50:00
14:10:00
14:30:00
14:50:00
15:10:00
15:30:00
15:50:00
16:10:00
16:30:00
16:50:00
17:10:00
17:30:00
17:50:00
18:10:00
18:30:00
18:50:00
19:10:00
19:30:00
19:50:00
20:10:00
20:30:00
20:50:00
21:10:00
21:30:00
21:50:00
22:10:00
22:30:00
22:50:00

*/
liangCK 2009-04-15
  • 打赏
  • 举报
回复
DECLARE @start_dt DATETIME,@end_dt DATETIME;
SELECT @start_dt='8:30',@end_dt='23:00';

DECLARE @step INT;
SET @step=20;

SELECT
CONVERT(VARCHAR(5),DATEADD(minute,@step*number,@start_dt),108) AS dt
FROM master.dbo.spt_values
WHERE type='p'
AND DATEADD(minute,@step*number,@start_dt)<=@end_dt

/*
dt
-----
08:30
08:50
09:10
09:30
09:50
10:10
10:30
10:50
11:10
11:30
11:50
12:10
12:30
12:50
13:10
13:30
13:50
14:10
14:30
14:50
15:10
15:30
15:50
16:10
16:30
16:50
17:10
17:30
17:50
18:10
18:30
18:50
19:10
19:30
19:50
20:10
20:30
20:50
21:10
21:30
21:50
22:10
22:30
22:50

(44 行受影响)

*/

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧