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

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

时间: 2024-11-14 09:49:06

sql时间段算法的相关文章

常用的SQL分页算法及对比

SQL Server 2005引入的新方法. 1 SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY keyField DESC) AS rowNum, * FROM tableName) AS t WHERE rowNum > start[比如:90] AND rowNum <= end[比如:100]=>[返回91-100] 2 3 SELECT top (PAGESIZE[比如:10]) FROM (SELECT ROW_NUMBER(

python进阶(一)关联sql的算法操作

上次我们讲了一个很简单的python程序,这次我们复杂一点,通过python操作更加复杂点并配合具有更多算法功能的sql语句. 首先,我们这个程序的功能为,通过python操作sql获取数据,并通过关联算法在服务器端对数据进行处理和筛选.然后返回前端,前端我们再用js通过ajax操作获取数据,并在前端再对数据进行二次处理.首先上一张效果图吧: 这里顺带用了日期插件跟分页插件.好了,废话不多说,还是直接上代码: # -*- coding: utf-8 -*- # # Copyright (C) 2

sql 时间段内没有的数据等于0

如何实现没有的时间段中使用0来填充?? if object_id('[A]') is not null drop table [A] go create table [A]([日期] datetime,[金额] int) insert [A] select * from [A] select '2014-05-01',100 union all select '2014-05-02',200 union all select '2014-05-05',300 union all select '

分页sql存储过程算法

/****** Object: StoredProcedure [dbo].[PRO_Pub_FenYe] Script Date: 08/04/2014 11:14:22 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* --suchao --2014-04-27 --分页查找公共方法 */ CREATE PROCEDURE [dbo].[PRO_Pub_FenYe] @AsyncSql NVARCHAR(MAX), @Pa

电表读数归零回滚SQL处理算法

在采集电表数据的时候,可以发现有些电表设备读数会发生回滚.这时候,如果单纯的累加计算用电量,就会出现负值.当然,这也许和电表的质量有关系. “RTQty”(当前读到的读数).“LastQty”(上次读数).“PrecedingQty”(前次读数).”ErrorFlag”(错误标示).”IncreaseQty”(增量读数).“IncreaseQtyOlder”(前次增量读数). --判断错误发生标示位 if @ErrorFlag=0 begin --错误标示位为0,那么计算本次的增量值 set @

查询SQL时间段内执行过的哪些SQL语句

SELECT TOP 1000 QS.creation_time, SUBSTRING(ST.text, (QS.statement_start_offset / 2) + 1, ((CASE QS.statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) ELSE QS.statement_end_offset END - QS.statement_start_offset) / 2) + 1) AS statement_text, ST.t

用sql对含有时间段字段(起始时间、结束时间)的记录做并集处理

来自于一个基友的问题: 他的博客同问题链接    sql时间段取并集.合并 https://blog.csdn.net/Seandba/article/details/105152412 问题:计算通道的总开放时长,只要有任意一个终端开放通道就算开放,难点在于各种终端开放时间重叠包含 问题测试数据 --问题一.测试数据--计算总开放时长(小时) TRUNCATE TABLE xcp; insert into xcp values('1','A1',to_date('20200317 01:00:

SQL,SP与ORM

SQL译为按每一次情况的办理,SP意为存储过程,ORM就是对象-关系映射,比如Hibernate 一,演变  刚开始的时候,只有sql语句,即可以用交互模式一句一句执行, 也可以用批模式执行,多行sql语句一次提交执行.  很快人们发现用批模式执行的一堆sql语言可以用过程的形式,事先存放到数据库里面,这就变成了存储过程.  随着面向对象技术的成熟,从程序中可以自动生成sql语句,这就是ORM 二,性能  如果我们把一堆sql,以批的方式一次送入到服务器,那么服务器,会对这一堆sql进行缓存,当

海量用户积分排名算法探讨【转载】

本文内容 问题 存储结构 算法1:简单SQL查询 算法2:均匀分区设计 算法3:树形分区设计 算法4:积分排名数组 该问具体出自哪里,不是很确定,而我是在某个微信公众号上看到的~文中的内容比较有启发性的~ 问题 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新.现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名.用户最大规模为2亿:积分为非负整数,且小于100万. PS:据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试