SQL循环语句

您所在的位置:网站首页 sql语句中的循环语句 SQL循环语句

SQL循环语句

2024-07-16 01:30| 来源: 网络整理| 查看: 265

前言 有时我们需要添加很多测试的数据 在不使用Java的情况下 如何用SQL语句进行添加 ? 本文将讲述单层循环,双层循环,以及日期循环

一、单层循环 其中涉及到循环的使用。我们欲通过这个存储过程,来达到往表中插入数据的效果

drop procedure if exists insert_while; delimiter // create procedure insert_while() begin declare i int default 1; while i select * from test; +-------------+---------------+ | location_id | location_name | +-------------+---------------+ | 1 | bookworm1 | | 2 | bookworm2 | | 3 | bookworm3 | | 4 | bookworm4 | | 5 | bookworm5 | | 6 | bookworm6 | | 7 | bookworm7 | | 8 | bookworm8 | | 9 | bookworm9 | +-------------+---------------+ 9 rows in set (0.00 sec) drop procedure if exists insert_while:如果存在函数insertwhile先删除它 delimiter //:将结束符定义为//在begin和end中会使用;如果不换程序会错误 create procedure:创建存储过程 delimiter ;结束符换回;号 call insert_while(); 执行定义的insert_while函数

二、双重循环 创建表

CREATE TABLE `dim_time` ( `TimeKey` int(11) NOT NULL, `Hour` tinyint(4) DEFAULT NULL, `Minute` tinyint(4) DEFAULT NULL, PRIMARY KEY (`TimeKey`) )

编写存储过程

drop procedure if exists insertValueIntoDimTime; delimiter // create procedure insertValueIntoDimTime() begin declare hour int default 0; declare min int default 0; while hour < 24 do while min < 60 do insert into dim_time values(hour*100+min,hour,min); set min=min+1; end while; set min = 0; set hour = hour+1; end while; end // delimiter ;

运行

mysql> call insertValueIntoDimTime; Query OK, 1 row affected (22.12 sec)

结果

mysql> select count(*) from dim_time; +----------+ | count(*) | +----------+ | 1440 | +----------+ 1 row in set (0.02 sec) mysql> select * from dim_time order by timekey limit 10; +---------+------+--------+ | TimeKey | Hour | Minute | +---------+------+--------+ | 0 | 0 | 0 | | 1 | 0 | 1 | | 2 | 0 | 2 | | 3 | 0 | 3 | | 4 | 0 | 4 | | 5 | 0 | 5 | | 6 | 0 | 6 | | 7 | 0 | 7 | | 8 | 0 | 8 | | 9 | 0 | 9 | +---------+------+--------+ 10 rows in set (0.00 sec) mysql> select * from dim_time order by timekey desc limit 10; +---------+------+--------+ | TimeKey | Hour | Minute | +---------+------+--------+ | 2359 | 23 | 59 | | 2358 | 23 | 58 | | 2357 | 23 | 57 | | 2356 | 23 | 56 | | 2355 | 23 | 55 | | 2354 | 23 | 54 | | 2353 | 23 | 53 | | 2352 | 23 | 52 | | 2351 | 23 | 51 | | 2350 | 23 | 50 | +---------+------+--------+ 10 rows in set (0.00 sec)

三、日期循环 3.1 需求 今天需要从订单库中找出过去六个月的订单,所以需要写一个简单的日期循环,用于读取数据。

3.2实现

drop procedure if exists date_loop; delimiter // create procedure date_loop() begin declare i int default 1; declare start_date date ; -- 当前日子减去6个月 declare end_date date ; -- 当前天 select date_sub(current_date(),interval 6 month) into start_date; select current_date() into end_date; while start_date < end_date do select start_date; set start_date = date_add(start_date,interval 1 day); end while; commit; end // delimiter ;

date_sub(object,interval):从指定日期减去指定年,月,日,时,分,秒

object: 1.必须 2.规定一个由data_current()返回的DataTime的对象

interval: 1.必须 2.规定是一个interval对象 返回值:如果成功返回DataTime对象,如果失败返回false



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3