私は、日付として 'YYYY-MM-DD'形式の列を持つテーブルを持っています。 selectを使用して、月単位ですべてのデータを取得できますか? 2012-01-xxから2013-04-xxまでのすべてのデータを必要としているとします。だから私は基本的に下記のようなSQLクエリを探しています:Postgresqlは月の範囲から選択します
SELECT * FROM table WHERE date IN BETWEEN '2012-01' AND '2013-04' (INVALID QUERY)
毎月ので、私は開始条件を調整するために上記のクエリを変更することができます「01」で始まります。
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND '2013-04' (INVALID QUERY)
ここで問題は終了日が付いています。指定された日付が無効な場合、クエリが失敗するため、月の長さ、うるう年の年齢などのすべての要素を考慮して、指定した月の最後の日付を手動で計算する必要があります。だから私はこのような何かをやっている:
SELECT * FROM table WHERE date IN BETWEEN '2012-01-01' AND 'VALID_MONTH_END_DATE' (VALID Query)
私はこの有効な終了日の計算を避ける方法があるかどうか知りたいですか?
明確化
私は次の月の最初の日の上に考えているが、その12月、来月は来年の1月になる場合でも、私は、言って、いくつかのロジックを適用する必要があります。私は、SQLのみのソリューションが可能かどうかを知りたがっていますか?
オーバーラップがうまく動作します。私は先月が12月のときに立ち往生しています。 –
どこからパラメータを取得しますか?アプリケーション?ウェブ?別のクエリ?あなたは文字列か整数(年、月)を持っていますか? –
'date'に' interval'を追加するときは注意が必要です。結果は 'timestamp'です。しかし、上記の例では動作します。大事な場合は結果を 'date'にキャストしてください。 「n月」の間隔を追加すると、関連する月の実際の日数にかかわらず、結果として同じ日が常に表示されます。正確な日数を追加し、 'date'に' integer'を追加すると、 'date'が返されます。 –