【原创】mysql while do…

本文介绍了一个使用SQL存储过程实现的时间段分割方法,该方法能够将指定的起始时间和结束时间按小时进行分割,并通过while循环逐步推进时间点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一个需求,将某个时间段按照指定时间长度分割成小的时间片段,本来吧要用python写的,又觉得python时间处理模块麻烦了点,所幸用SQL试试吧,才发现没有办法分行,不能分就不能分吧,就当练习一下sql~~

比如将2013-11-11 01:00:00  --- 2013-11-11 03:00:00 分割如下:
2013-11-11 01:00:00 --- 2013-11-11 02:00:00
2013-11-11 02:00:00 --- 2013-11-11 03:00:00
本来想用for循环的,就用while do吧。
drop procedure ff;

DELIMITER $$
CREATE PROCEDURE `ff`(s_time varchar(10),e_time varchar(10) charset 'utf8')
BEGIN
    declare time longtext;#最后显示的的时间字符串
    declare n_time varchar(25);#不断更新的时间
    declare i int;#标示第多少个小时
    set time = date_sub(s_time,interval 0 hour);#初始化结果为开始日期的时间类型
    set n_time = date_sub(s_time,interval 0 hour);#初始化当前时间为开始日期的时间类型
    set s_time = date_sub(s_time,interval 0 hour);#初始化开始日期为时间类型
    set e_time = date_sub(e_time,interval 0 hour);#初始化结束时间为时间类型
    set i = 0;#初始化当前循环第0次,第0个小时
    while n_time >= s_time and n_time <= e_time do
        begin
            #操作
            set i =i + 1;#循环+1次,标识要延后一个小时
            #select date_sub(s_time,interval i hour);
            set n_time = date_sub(s_time,interval -i hour);#设置当前时间为开始时间延后一个小时,注意是"-i"
            SET time=concat(time,'|',date_sub(s_time,interval -i hour));#用"|"符号将前一个小时和当前时间拼接起来。
            #select time,n_time;
        end;
    end while;
    select time;#结束循环后,打印结果
END$$

call ff('2012-11-11','2012-11-12');
2012-11-11 00:00:00|2012-11-11 01:00:00|2012-11-11 02:00:00|2012-11-11 03:00:00|2012-11-11 04:00:00|2012-11-11 05:00:00|2012-11-11 06:00:00|2012-11-11 07:00:00|2012-11-11 08:00:00|2012-11-11 09:00:00|2012-11-11 10:00:00|2012-11-11 11:00:00|2012-11-11 12:00:00|2012-11-11 13:00:00|2012-11-11 14:00:00|2012-11-11 15:00:00|2012-11-11 16:00:00|2012-11-11 17:00:00|2012-11-11 18:00:00|2012-11-11 19:00:00|2012-11-11 20:00:00|2012-11-11 21:00:00|2012-11-11 22:00:00|2012-11-11 23:00:00|2012-11-12 00:00:00

其实想了想,应该是可以的,sql中设置自增长...
暂且这样吧,参数列表最好加上时间长度,以秒为单位最合适,这样更灵活。
<?php session_start(); include "Conn/conn.php"; include "page.php"; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>博文列表</title> <link rel="stylesheet" href="CSS/list.css"/> <link href="CSS/index.css" rel="stylesheet"/> </head> <body style=" background-color:#F1F2F6;"> <div class="banner"> <div class="nav"> <a class="left" href="index.php">博客系统</a> <div class="right"> <?php if(isset($_SESSION['username'])) { ?> <a class="a" href="./myinfo.php">个人中心</a> <a class='a' href='#'> | </a> <a class="a" href="./doAction.php?a=loginout">安全退出</a> <?php }else { ?> <a class='a' href='./login.php'>登录</a> <a class='a' href='#'> | </a> <a class='a' href='./Register.php'>注册</a> <?php } ?> </div> </div> </div> <div class="bgimg"></div> <div id="big" style="margin-top: -50px;border-radius:5px;"> <div id="list"> <div id="listbt"> <div id="bkname"> <h4>博文列表</h4> </div> <div id="bzname"> <h4>博主:<?php echo $_SESSION['username']?></h4> </div> </div> <div id="bkinfo"> <div id="bklogo"> <img src="images/PHP.png"/> </div> <div id="tjinfo"></div> <div id="bkjianj"> <?php $sql="select sign from tb_userdetail where userid={$_SESSION['uid']}"; $result = mysqli_query($link,$sql); foreach($result as $v){ echo "<p>".$v['sign']."</p>"; } ?> </div> </div> <div id="biaotou"> <ul> <li class="tiezibt" style="width: 550px;"><a href="#">标题</a></li> <li><a href="#">作者</a></li> <li><a href="#">操作</a></li> <li><a href="#">发表时间</a></li> </ul> </div> <?php $sql="select * from tb_article where author='$_SESSION[username]'"; $result=mysqli_query($link,$sql); $rows = $result->num_rows; Page($rows,2); $sql = "select * from tb_article where author='$_SESSION[username]' order by id desc limit $select_from $select_limit"; $result=mysqli_query($link,$sql); if($result && mysqli_num_rows($result)>0){ while($rows=mysqli_fetch_assoc($result)){ ?> <div id="listks"> <div class="invitationzt"> <div class="invitalogo"> </div> <div class="invitationbt"> <a href="./file_show.php?id=<?php echo $rows['id']?>"><?php echo $rows['title']?></a> </div> <div class="custor"> <a href="#"><?php echo $rows['author']?></a> </div> <div class="reply"> <a href="./doAction.php?a=del_file&id=<?php echo $rows['id']?>" onclick="return confirm('确定将此记录删除?')">删除</a>| <a href="./file.php?a=edit_file&id=<?php echo $rows['id']?>">编辑</a> </div> <div class="last"> <?php echo date("Y-m-d",$rows['time'])?> </div> </div> </div> <?php } } ?> <div id="page" style="text-align: center;"> <div id="pagefy" style="margin: 0 auto;"> <ul> <?php echo $pagenav;?> </ul> </div> </div> </div> </div> <div id="clear"></div> <?php include "footer.php"; ?> </body> </html>在该代码中,foreach($result as $v){报错,修改并输出
最新发布
06-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值