日付関数を使用して月初と月末の日付を取得する(MySQL)

意外と一から考えるのが面倒なので。
LAST_DAY関数はあるのにFIRST_DAY関数はない不思議。

 -- 当月月初
select DATE_FORMAT( CURDATE() , '%Y-%m-01' );
-- 当月月末
select LAST_DAY( CURDATE() );

-- 前月月初
select DATE_FORMAT( ADDDATE( CURDATE() , INTERVAL -1 MONTH) , '%Y-%m-01' );
-- 前月月末
select LAST_DAY( ADDDATE( CURDATE() , INTERVAL -1 MONTH) );

-- 次月月初
select DATE_FORMAT( ADDDATE( CURDATE() , INTERVAL 1 MONTH) , '%Y-%m-01' );
-- 次月月末
select LAST_DAY( ADDDATE( CURDATE() , INTERVAL 1 MONTH) );

select ADDDATE( '2012-01-31' , INTERVAL 1 MONTH);
としても、「2012-02-29」と返ってきてくれるのはありがたいですね。