J'essaie d'obtenir un type de "date" qui correspond au premier jour du mois en cours. En gros, une de mes tables stocke une date, mais je veux que ce soit toujours le premier du mois. J'essaie donc de créer un déclencheur qui obtiendra now () puis remplacera la journée par un 1.
Vous pouvez utiliser l'expression date_trunc('month', current_date)
. Démontré avec une instruction SELECT. . .
select date_trunc('month', current_date)
2013-08-01 00:00:00-04
Pour supprimer le temps, castez à la date.
select cast(date_trunc('month', current_date) as date)
2013-08-01
Si vous êtes certain que cette colonne doit toujours ne stocker que le premier du mois, vous devez également utiliser une contrainte 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
ERREUR: la nouvelle ligne de la relation "foo" viole la contrainte de vérification "foo_first_of_month_check" DÉTAIL: la ligne défaillante contient (2015-01-02) .
date_trunc()
le fera.
SELECT date_trunc('MONTH',now())::DATE;
http://www.postgresql.org/docs/current/static/functions-datetime.html
SELECT TO_DATE ('2017-12-12', 'AAAA-MM-01');
2017-12-01
Vous pouvez également utiliser TO_CHAR pour obtenir le premier jour du mois:
SELECT TO_CHAR(some_date, 'yyyy-mm-01')::date