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

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

我很难弄清楚如何使inMonth成为sql函数Last_DAY接受的参数。是否有另一个函数将int作为一个月,并返回该月的最后一天?我尽量避免使用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

编辑
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));
    -> end@@
Query OK, 0 rows affected (0.24 sec)

10-06 12:22