人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PostgreSQLについての質問です。
SELECT文で、
XXXX年のXX月の第X週目から、
YYYY年のYY月の第Y週目までをWHEREする方法をご教授おねがいします。

●質問者: disca
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:postgreSQL SELECT XXXX 教授
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kunyami
●15ポイント

dが抽出条件となるtimestamp型の列だったとして、以下のような条件でどうでしょう。

where extract(year from d) * 10000 + extract(month from d) * 100 +

case when extract(week from d) - extract(week from date_trunc('month', d))<0

then extract(week from d) + 1

else extract(week from d) - extract(week from date_trunc('month', d)) + 1

end

between 20060104 and 20070103

※betweenの20060104と20070103はそれぞれ2006年1月第4週と2007年1月第3週

週は月曜日から始まるものとして計算されます。

extractの代わりにdate_partを使うことも可能です。

extract, date_trunc, date_part関数の詳細は、以下をご覧ください。

http://www.postgresql.jp/document/pg815doc/html/functions-dateti...

◎質問者からの返答

ありがとうございます、早速試してみます。


2 ● vector
●55ポイント ベストアンサー
SELECT
 A.*
FROM
 table1 A
WHERE
 TO_CHAR(A.hiduke, 'YYYYMMW') BETWEEN 'XXXXXXX' AND 'YYYYYYY'

TO_CHARの日付書式で月中の週番号というのがありますので、それを利用しています。

http://www.postgresql.jp/document/pg74doc/html/functions-formatt...

◎質問者からの返答

ありがとうございます、上記で解決しました(^^。


3 ● b-wind
●20ポイント

検索対象の列を関数で変換してしまうと INDEX が効かなくなるのであまりオススメできませんね。


今手元に確認できる環境が無いんですが、

SELECT * FROM table_name
 WHERE date_column BETWEEN to_timestamp('XXXX/XX/X','YYYY/MM/W') AND to_timestamp('YYYY/YY/Y','YYYY/MM/W');

のように検索条件自体を timestamp に変換する事で INDEX を有効に活用できるはずです。

http://www.postgresql.jp/document/pg815doc/html/functions-format...

◎質問者からの返答

なるほど参考になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ