[pgsql-jp: 37072] Re: 年月のデータ

Ryosuke Hosoi hosoi @ ryo.com
2006年 5月 18日 (木) 04:21:38 JST


ほそいです

From: Tanaka-Qtaro-Yasuhiro <tanaq @ ca2.so-net.ne.jp>
Subject: [pgsql-jp: 37071] Re: 年月のデータ
Date: Wed, 17 May 2006 23:44:44 +0900
Message-ID: <446B36DC.6090509 @ ca2.so-net.ne.jp>

> で、前年同月比とか3ヶ月前の売上げとの比較を出力する必要がある
> としたらどうでしょう。
> 
> やっぱり 整数がいいかなあ。
> 前年同月は yyyymm - 100 で出せますしね。
> Xヶ月前は
>    case when yyyymm % 100 > X then yyyymm - X else yyyymm - 100 + 12 - X end
> かな。

確かに短く書けますが、
「100ってなんなんだ!」
って気はしますよね


元の

> 【案3】date型を使い日は1などに固定
> create table bbb (
>   yyyymm date
>     check (extract(day from yyyymm) = 1)
> );

がけっこうイイと思うんですが、どうでしょう?

たとえば売り上げ明細情報に
 order_date TIMESTAMP
という売り上げ日時があった場合、
 yyyymm = date(date_trunc('month', order_date))
で結合できます

前年同月などは
 date(yyyymm - interval '1 year');
 date(yyyymm - interval '3 month');
などと、強力な日付/時刻演算子が使えます

あと、dateのフィールド長はintergerと同じく4バイトですので、
容量的にも問題ない感じです


# と、言いながら昔書いた 'yyyymm char(6)' なシステムも
# メンテする日々・・・

-- 
 Ryosuke Hosoi / 細井 良祐
 mailto:hosoi @ ryo.com http://www.ryo.com/
 PGP Public Key http://www.ryo.com/ryo/hosoi.ryo.com.asc
 fingerprint = 4F39 61B0 2034 3A5C DFE8  FBCB 7B99 90CF EBE1 A3F3



pgsql-jp メーリングリストの案内