web-dev-qa-db-ja.com

postgresで月の最初の日付を取得する

現在の月の最初の日に対応する「日付」タイプを取得しようとしています。基本的に、私のテーブルの1つは日付を格納しますが、それを常に月の最初にしたいので、now()を取得し、その日を1に置き換えるトリガーを作成しようとしています。

38
Gargoyle

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

23
bma

SELECT TO_DATE( '2017-12-12'、 'YYYY-MM-01');

2017-12-01

1
Victorqedu

TO_CHARを使用して、月の最初の日を取得することもできます。

SELECT TO_CHAR(some_date, 'yyyy-mm-01')::date
1
Naufal

これを見つけて、その月の初日とその月の最終日を取得します

select date_trunc('month', current_date-interval '1 year'), date_trunc('month', current_date-interval '1 year')+'1month'::interval-'1day'::interval;
0