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

:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:

一小时制

:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:
:-:

半小时制

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

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

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

04-27 05:24