SELECT文で、
XXXX年のXX月の第X週目から、
YYYY年のYY月の第Y週目までをWHEREする方法をご教授おねがいします。
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...
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...
ありがとうございます、早速試してみます。
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...
ありがとうございます、上記で解決しました(^^。
検索対象の列を関数で変換してしまうと 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...
なるほど参考になります。
ありがとうございます、上記で解決しました(^^。