sql时间段算法
Posted <抢囡囡糖未遂/>
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql时间段算法相关的知识,希望对你有一定的参考价值。
需求:领导要求写时间段算法,格式如下
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时间段算法的主要内容,如果未能解决你的问题,请参考以下文章
有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]
以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?