PostgreSQLについての質問です。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2006/11/10 14:32:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:vector_xenon No.2

回答回数113ベストアンサー獲得回数4

ポイント55pt
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...

id:disca

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

2006/11/10 14:30:36

その他の回答2件)

id:kunyami No.1

回答回数24ベストアンサー獲得回数4

ポイント15pt

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...

id:disca

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

2006/11/10 11:34:35
id:vector_xenon No.2

回答回数113ベストアンサー獲得回数4ここでベストアンサー

ポイント55pt
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...

id:disca

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

2006/11/10 14:30:36
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント20pt

検索対象の列を関数で変換してしまうと 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...

id:disca

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

2006/11/10 14:31:17

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません