2013-08-05 36 views
26

Sto cercando di ottenere un tipo di 'data' che corrisponde al primo giorno del mese corrente. Fondamentalmente una delle mie tabelle memorizza una data, ma voglio che sia sempre il primo del mese, quindi sto cercando di creare un trigger che otterrà ora() e quindi sostituire il giorno con 1.Ottenere il primo giorno del mese in postgres

risposta

57

È possibile utilizzare l'espressione date_trunc('month', current_date). Dimostrato con una dichiarazione SELECT. . .

select date_trunc('month', current_date) 
2013-08-01 00:00:00-04 

Per rimuovere l'ora, trasmettere fino ad oggi.

select cast(date_trunc('month', current_date) as date) 
2013-08-01 

Se si è certi che la colonna dovrebbe sempre negozio solo il primo di un mese, si dovrebbe anche usare un vincolo 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 
 
ERROR: new row for relation "foo" violates check constraint "foo_first_of_month_check" 
DETAIL: Failing row contains (2015-01-02). 
2

SELEZIONA TO_DATE ('2017/12/12', 'YYYY-MM-01');

2017-12-01

+0

Qual è il problema con questa risposta? – Victorqedu

+1

probabilmente solo che hai usato un dato statico piuttosto che il CURRENT_DATE()? –

Problemi correlati