開始年月と終了年月を指定すると、表にして返してくれるサンプルです
コード
DROP PROCEDURE IF EXISTS procedureName;
DELIMITER ;;
CREATE DEFINER=root@localhost PROCEDURE `procedureName`(in `arg_ym_start` varchar(10),in `arg_ym_end` varchar(10))
READS SQL DATA
BEGIN
-- 年月の開始と終了を指定することにより、年月の表を返す
declare current_ym varchar(10);
DROP TABLE IF EXISTS tmp_ym;
CREATE TEMPORARY TABLE tmp_ym
(
title varchar(100)
,yearmonth varchar(10)
,ym_start varchar(10)
,ym_end varchar(10)
);
set current_ym = arg_ym_start;
CREYMD : WHILE current_ym <= arg_ym_end DO
INSERT INTO tmp_ym values (current_ym,current_ym,CONCAT(current_ym,'/01'), DATE_FORMAT(ADDDATE(ADDDATE(CONCAT(current_ym,'/01'),INTERVAL 1 MONTH),INTERVAL -1 DAY),'%Y/%m/%d'));
set current_ym = SUBSTR(DATE_FORMAT(ADDDATE(CONCAT(current_ym,'/01'),INTERVAL 1 MONTH),'%Y/%m/%d'),1,7);
END WHILE CREYMD;
SELECT
title
,yearmonth
,ym_start
,ym_end
from
tmp_ym;
DROP TABLE IF EXISTS tmp_ym;
END;;
DELIMITER ;
実行結果例
mysql> call procedureName('2012/01','2012/12');
+---------------+-----------+------------+------------+
| title | yearmonth | ym_start | ym_end |
+---------------+-----------+------------+------------+
| 2012/01 | 2012/01 | 2012/01/01 | 2012/01/31 |
| 2012/02 | 2012/02 | 2012/02/01 | 2012/02/29 |
| 2012/03 | 2012/03 | 2012/03/01 | 2012/03/31 |
| 2012/04 | 2012/04 | 2012/04/01 | 2012/04/30 |
| 2012/05 | 2012/05 | 2012/05/01 | 2012/05/31 |
| 2012/06 | 2012/06 | 2012/06/01 | 2012/06/30 |
| 2012/07 | 2012/07 | 2012/07/01 | 2012/07/31 |
| 2012/08 | 2012/08 | 2012/08/01 | 2012/08/31 |
| 2012/09 | 2012/09 | 2012/09/01 | 2012/09/30 |
| 2012/10 | 2012/10 | 2012/10/01 | 2012/10/31 |
| 2012/11 | 2012/11 | 2012/11/01 | 2012/11/30 |
| 2012/12 | 2012/12 | 2012/12/01 | 2012/12/31 |
+---------------+-----------+------------+------------+
0 件のコメント:
コメントを投稿