2012-02-18 102 views
1

我正在尝试创建一个存储过程,当给定一个月的值时,将该用户返回该月的最后一天。存储过程:获取月份

到目前为止:

DROP PROCEDURE IF EXISTS getLastDayMonth$$ 
CREATE PROCEDURE getLastDayMonth(IN inMonth int) 
BEGIN 
    SELECT LAST_DAY(inMonth); 
END $$ 

我无法弄清楚如何我可以使inMonth的SQL函数Last_DAY接受一个参数。是否有另一个函数将int作为一个月并返回该月的最后一天?我想,以避免给人一种DATE类型作为paramater

+0

哪月哪一年被inMonth应该代表什么?今年,去年,明年......? (3月至1月不一定非常重要,但对于2月份,这一年至关重要!) – 2012-02-18 18:53:10

+0

inMonth应该是任意月份,只要最后一天可以返回,年份并不重要。我理解2月份的问题,但是出于好奇,Last_Day函数可以给02月份带来的好处是: – Warz 2012-02-18 18:56:18

+0

:最后一天的用途是什么?作为一个用户,我会有点困惑,如果程序会返回我2月28日而不是29日,反之亦然... – 2012-02-18 19:01:02

回答

1

您可以添加飞蛾第一年的一天,并得到LAST_DATE:

SELECT LAST_DAY(DATE_ADD('2012-01-01 00:00:00', 
          INTERVAL inMonth - 1 MONTH) 
       ); 

替代解决方案是ELT功能:

SELECT cast( 
     ELT(inmonth, '31', '28', '31', '30', '31', .... ,'31') 
     as SMALLINT 
     ) as last_day 

最后一,用case声明:

SELECT case inmonth 
     when 1 then 31 
     when 2 then 29 
     ... 
     when 12 then 31 
     end as last_day 

EDITED

mysql> CREATE PROCEDURE getLastDayMonth(IN inMonth int) 
    -> begin 
    -> SET @t=inMonth -1; 
    -> SELECT LAST_DAY(DATE_ADD('2012-01-01 00:00:00',INTERVAL @t MONTH)); 
    -> [email protected]@ 
Query OK, 0 rows affected (0.24 sec) 
+0

@danihp我想测试你的第一个解决方案,我不断收到一个MySQL语法错误,是DATE_ADD函数假设有-1作为变量? – Warz 2012-02-18 22:53:27

+0

查看编辑测试 – danihp 2012-02-19 10:04:28

+0

我添加了DAY函数,因为Last_Day返回一个日期。谢谢 – Warz 2012-02-19 17:19:10