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
26
A
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).
17
date_trunc()
lo farà.
SELECT date_trunc('MONTH',now())::DATE;
http://www.postgresql.org/docs/current/static/functions-datetime.html
2
SELEZIONA TO_DATE ('2017/12/12', 'YYYY-MM-01');
2017-12-01
Qual è il problema con questa risposta? – Victorqedu
probabilmente solo che hai usato un dato statico piuttosto che il CURRENT_DATE()? –