创建存储过程showatudent,根据当前系统时间判断当前季节。
1-3月为春季,4-6月为夏季,7-9月为秋季,10-12月为冬季。
并显示数据库schooldb中出生于当前季节的学生人数。
DELIMITER //
CREATE PROCEDURE showatudent()
BEGIN
DECLARE current_month INT;
DECLARE current_season VARCHAR(10);
DECLARE student_count INT;
SET current_month = MONTH(NOW());
IF current_month BETWEEN 1 AND 3 THEN
SET current_season = '春季';
ELSEIF current_month BETWEEN 4 AND 6 THEN
SET current_season = '夏季';
ELSEIF current_month BETWEEN 7 AND 9 THEN
SET current_season = '秋季';
ELSE
SET current_season = '冬季';
END IF;
SELECT COUNT(*) INTO student_count FROM schooldb WHERE DATE_FORMAT(birthdate, '%m') = current_month;
SELECT CONCAT('当前季节为', current_season, ',出生于当前季节的学生人数为', student_count, '人') AS result;
END //
DELIMITER ;
以下为示例,表名(目前用的schooldb)根据实际情况改下:
-- 修改默认的语句分隔符
DELIMITER //
CREATE PROCEDURE showatudent()
BEGIN
DECLARE current_season VARCHAR(10);
DECLARE season_start_month INT;
DECLARE season_end_month INT;
DECLARE student_count INT;
-- 获取当前月份
SET @current_month := MONTH(NOW());
-- 判断当前季节
IF @current_month BETWEEN 1 AND 3 THEN
SET current_season := '春季';
SET season_start_month := 1;
SET season_end_month := 3;
ELSEIF @current_month BETWEEN 4 AND 6 THEN
SET current_season := '夏季';
SET season_start_month := 4;
SET season_end_month := 6;
ELSEIF @current_month BETWEEN 7 AND 9 THEN
SET current_season := '秋季';
SET season_start_month := 7;
SET season_end_month := 9;
ELSEIF @current_month BETWEEN 10 AND 12 THEN
SET current_season := '冬季';
SET season_start_month := 10;
SET season_end_month := 12;
ELSE
SET current_season := '无效季节';
SET season_start_month := 0;
SET season_end_month := 0;
END IF;
-- 查询出生于当前季节的学生人数
SET @query := CONCAT('SELECT COUNT(*) FROM schooldb WHERE MONTH(birthday) BETWEEN ', season_start_month, ' AND ', season_end_month);
PREPARE stmt FROM @query;
EXECUTE stmt INTO student_count;
DEALLOCATE PREPARE stmt;
-- 显示结果
SELECT CONCAT('当前季节:', current_season) AS '季节', CONCAT('出生于当前季节的学生人数:', student_count) AS '学生人数';
END //
DELIMITER ;
mysql> show tables;
+-----------------+
| Tables_in_demo1 |
+-----------------+
| student |
+-----------------+
1 row in set (0.00 sec)
首先需要创建一个存储过程,名为showstudent,代码如下:
CREATE PROCEDURE showstudent()
BEGIN
DECLARE season INT;
SET season = MONTH(NOW());
IF season BETWEEN 1 AND 3 THEN
SELECT COUNT(*) FROM schooldb WHERE MONTH(birthday) BETWEEN 1 AND 3;
ELSEIF season BETWEEN 4 AND 6 THEN
SELECT COUNT(*) FROM schooldb WHERE MONTH(birthday) BETWEEN 4 AND 6;
ELSEIF season BETWEEN 7 AND 9 THEN
SELECT COUNT(*) FROM schooldb WHERE MONTH(birthday) BETWEEN 7 AND 9;
ELSEIF season BETWEEN 10 AND 12 THEN
SELECT COUNT(*) FROM schooldb WHERE MONTH(birthday) BETWEEN 10 AND 12;
END IF;
END
在该存储过程中,首先定义了一个名为season的整型变量,用于存储当前系统时间的月份(使用MONTH函数),然后利用IF...ELSEIF...ELSE语句判断当前是哪个季节,并利用COUNT函数统计符合条件的学生数量,最后返回结果。
调用该存储过程可以使用以下代码:
CALL showstudent();
注:需先在schooldb中创建一张表,包含学生信息,其中包括birthday字段,存储学生的生日信息。