私があなたの説明から推測できる限り、これは:
SELECT the_date_column_name, extract(dow from the_date_column_name)
FROM calendar
WHERE date_trunc('month', the_date_column_name) = DATE '2012-09';
...またはbtree-indexableバージョン:
SELECT the_date_column_name, extract(dow from the_date_column_name)
FROM calendar
WHERE the_date_column_name BETWEEN DATE '2012-09-01' AND (DATE '2012-09-01' + INTERVAL '1' MONTH) - INTERVAL '1' DAY;
仕事をする必要があります。
>= DATE '2012-09-01'
必要に応じて、< DATE '2012-10-01'
の代わりにを使用できますBETWEEN
。終了日の煩雑な構成を回避し、同じように機能します。
関数でラップするには、どのように呼び出し、どのように結果を最初に返すかを決める必要があります。開始日と終了日の範囲を渡しますか?関心のある月の1日を表す日付?何?そして、どのように結果を返したいですか?
ところで、あなたのコラムが"date"
あなたの説明が示唆するように実際に名前が付けられているなら、その名前を変えてください。DATE
SQLキーワードとタイプ名です。状況によってはユーザー識別子として使用できますが、それは悪い考えです。より良い名前を選択してください。