現在の月の最初の日に対応する「日付」タイプを取得しようとしています。基本的に、私のテーブルの1つは日付を格納しますが、それを常に月の最初にしたいので、now()を取得し、その日を1に置き換えるトリガーを作成しようとしています。
式date_trunc('month', current_date)
を使用できます。 SELECTステートメントで示されています。 。 。
select date_trunc('month', current_date)
2013-08-01 00:00:00-04
時間を削除するには、日付にキャストします。
select cast(date_trunc('month', current_date) as date)
2013-08-01
カラムがalwaysの最初の月のみを保存する必要があることが確実な場合は、CHECK制約も使用する必要があります。
create table foo (
first_of_month date not null
check (extract (day from first_of_month) = 1)
);
insert into foo (first_of_month) values ('2015-01-01'); --Succeeds
insert into foo (first_of_month) values ('2015-01-02'); --Fails
エラー:リレーション "foo"の新しい行がチェック制約 "foo_first_of_month_check"に違反しています。 詳細:失敗した行には(2015-01-02)が含まれています。
date_trunc()
が実行します。
SELECT date_trunc('MONTH',now())::DATE;
http://www.postgresql.org/docs/current/static/functions-datetime.html
SELECT TO_DATE( '2017-12-12'、 'YYYY-MM-01');
2017-12-01
TO_CHARを使用して、月の最初の日を取得することもできます。
SELECT TO_CHAR(some_date, 'yyyy-mm-01')::date
これを見つけて、その月の初日とその月の最終日を取得します
select date_trunc('month', current_date-interval '1 year'), date_trunc('month', current_date-interval '1 year')+'1month'::interval-'1day'::interval;