web-dev-qa-db-fra.com

Obtenir la première date du mois en postgres

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.

33
Gargoyle

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

23
bma

SELECT TO_DATE ('2017-12-12', 'AAAA-MM-01');

2017-12-01

1
Victorqedu

Vous pouvez également utiliser TO_CHAR pour obtenir le premier jour du mois:

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