標籤:ide else open while start contract ddc 領導 indicator
需求:領導要求寫時間段演算法,格式如下
07:00-08:0008:00-09:0009:00-10:0010:00-11:0011:00-12:0012:00-13:0013:00-14:0014:00-15:0015:00-16:0016:00-17:0017:00-18:0018:00-19:0019:00-20:0020:00-21:0021:00-22:0022:00-23:00
一小時制
07:00-07:3007:30-08:0008:00-08:3008:30-09:0009:00-09:3009:30-10:0010:00-10:3010:30-11:0011:00-11:3011:30-12:0012:00-12:3012:30-13:0013:00-13:3013:30-14:0014:00-14:3014:30-15:0015:00-15:3015:30-16:0016:00-16:3016:30-17:00
半小時制
一小時制比較好解決,直接迴圈即可
--如果是一小時時間段DECLARE @a INTSET @a=7WHILE @a<23BEGINPRINT 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+1END
半小時制
--如果是半小時時間段--07:30-23:30DECLARE @start VARCHAR(20)DECLARE @end VARCHAR(20)SET @start=‘07:00‘SET @end=‘22:00‘DECLARE @b INTSET @b=CAST(LEFT(@start,2) AS INT)--取小時數WHILE @b<CAST(LEFT(@end,2) AS INT)BEGINDECLARE @str VARCHAR(10)DECLARE @str1 VARCHAR(10)SET @str=CAST(@b AS VARCHAR(10))SET @str=REPLICATE(‘0‘,2-len(@str))+@strSET @str1=CAST(@b+1 AS VARCHAR(10))SET @str1=REPLICATE(‘0‘,2-len(@str1))+@str1IF(CHARINDEX(‘30‘,@start)>0)--如果開始時間包含半小時BEGINPRINT @str+‘:‘+‘30‘+‘-‘+@str1+‘:00‘IF((@str1+‘:00‘)=@end)BREAKPRINT @str1+‘:00‘+‘-‘+@str1+‘:30‘ENDELSEBEGINPRINT @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‘ENDSET @b=@b+1END
半小時制感覺寫的不好,智商捉雞,歡迎各路大神指正。
sql時間段演算法