- 这可能是矫枉过正,但你可以做这样一个过程:
use dbname;
DELIMITER $$
DROP PROCEDURE IF EXISTS `days_of_month` $$
CREATE PROCEDURE `days_of_month`(iDate DATETIME) DETERMINISTIC
BEGIN
DECLARE last_day,mm,yy,dd INT DEFAULT 0;
SET dd = 1;
SET mm = month(iDate);
SET yy = year(iDate);
set iDate = case when iDate is null then now() else iDate end;
SET last_day = date_format(LAST_DAY(iDate),'%d');
DROP TABLE IF EXISTS `days_of_month_tblTemp`;
CREATE TEMPORARY TABLE days_of_month_tblTemp(tmpDate DATE);
label1: LOOP
insert into days_of_month_tblTemp(tmpDate) values (concat(yy,'-',mm,'-',dd));
SET dd = dd + 1;
IF dd < (last_day+1) THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
SELECT * from days_of_month_tblTemp;
END $$
DELIMITER ;
- 这样运行:CALL DAYS_OF_MONTH( '2012-02-22');
如果你没有访问表,那么你使用SQL呢? – Val 2011-02-22 17:34:38
为什么不用你的编程语言来做 - 可能要简单得多。 – Knubo 2011-02-22 17:36:55
出于好奇,为什么需要在sql中完成?似乎是一个尴尬的请求,更容易在您选择的脚本语言中完成。 – 2011-02-22 17:37:16