码迷,mamicode.com
首页 > 数据库 > 详细

sql时间段算法

时间:2016-11-01 01:05:57      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:ide   else   open   while   start   contract   ddc   领导   indicator   

需求:领导要求写时间段算法,格式如下

技术分享
07:00-08:00
08:00-09:00
09:00-10:00
10:00-11:00
11:00-12:00
12:00-13:00
13:00-14:00
14:00-15:00
15:00-16:00
16:00-17:00
17:00-18:00
18:00-19:00
19:00-20:00
20:00-21:00
21:00-22:00
22:00-23:00
一小时制
技术分享
07:00-07:30
07:30-08:00
08:00-08:30
08:30-09:00
09:00-09:30
09:30-10:00
10:00-10:30
10:30-11:00
11:00-11:30
11:30-12:00
12:00-12:30
12:30-13:00
13:00-13:30
13:30-14:00
14:00-14:30
14:30-15:00
15:00-15:30
15:30-16:00
16:00-16:30
16:30-17:00
半小时制

一小时制比较好解决,直接循环即可

--如果是一小时时间段
DECLARE @a INT
SET @a=7
WHILE @a<23
BEGIN
PRINT REPLICATE(0,2-len(@a))+CAST(@a AS VARCHAR(10))+:00-+REPLICATE(0,2-len(@a+1))+CAST(@a+1 AS VARCHAR(20))+:00
SET @a=@a+1
END

半小时制

--如果是半小时时间段
--07:30-23:30
DECLARE @start VARCHAR(20)
DECLARE @end VARCHAR(20)
SET @start=07:00
SET @end=22:00

DECLARE @b INT
SET @b=CAST(LEFT(@start,2) AS INT)--取小时数
WHILE @b<CAST(LEFT(@end,2) AS INT)
BEGIN
DECLARE @str VARCHAR(10)
DECLARE @str1 VARCHAR(10)
SET @str=CAST(@b AS VARCHAR(10))
SET @str=REPLICATE(0,2-len(@str))+@str
SET @str1=CAST(@b+1 AS VARCHAR(10))
SET @str1=REPLICATE(0,2-len(@str1))+@str1
IF(CHARINDEX(30,@start)>0)--如果开始时间包含半小时
BEGIN
PRINT @str+:+30+-+@str1+:00
IF((@str1+:00)=@end)
BREAK
PRINT @str1+:00+-+@str1+:30
END
ELSE
BEGIN
PRINT @str+:00+-+@str+:30
PRINT @str+:+30+-+@str1+:00
IF(@b=(CAST(LEFT(@end,2)AS INT)-1) and CHARINDEX(30,@end)>0)--如果结尾时间有半小时
PRINT @str1+:+00+-+@str1+:30
END
SET @b=@b+1
END

半小时制感觉写的不好,智商捉鸡,欢迎各路大神指正。

 

sql时间段算法

标签:ide   else   open   while   start   contract   ddc   领导   indicator   

原文地址:http://www.cnblogs.com/xiefengdaxia123/p/6017669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!