2012-02-18 98 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