年月型が存在するかのように数値を扱えるPERIOD_* 関数(MySQL)

Pocket

 

年月型が無いため、月の計算が面倒

カラムに年月のみを持ちたいケースが結構あると思います。
僕はint型で[YYYYMM]形式の数値を持たせることが多いのですが、
月の加算が必要な場合、int型であるためにDATE_ADD() などの便利な関数が使えません。
201212 + 1(か月) = 201301 とはならないですよね当然。
MySQLに年月型というのは存在しませんが、以下の関数を使うことで、int型を年月型として使いやすくなります。

 

PERIOD_*系の関数で年月型のようにint型を扱う

PERIOD_* 系の関数を使うと、YYYYMM形式の数値に対して、あたかも年月型であるかのように計算ができます。

PERIOD_ADD(P,Ns)

N 月を、期間 P に加えます (フォーマットは YYMM または YYYYMM) 。フォーマット YYYYMM で値を返します。期間引数 P は日付値ではありません のでご注意ください。

PERIOD_DIFF(P1,P2)

期間 P1 と P2 間の月の数を返します。P1 および P2 は、YYMM または YYYYMM のフォーマットになります。期間引数 P1 および P2 は日付値ではありませんのでご注意ください。

 

PERIOD_*関数を実際に試す

結果を見ればわかる通り、

  • 201212 に 1(か月) を足すと → 201301
  • 201212 と 201112 の差は → 12(か月)

という結果になりました。
※MySQL 5.1.46環境で実行しました。

これは便利。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Post Navigation