it-swarm.com.de

Holen Sie sich das erste Datum des Monats in Postgres

Ich versuche, einen Datumstyp zu erhalten, der dem ersten Tag des aktuellen Monats entspricht. Grundsätzlich speichert einer meiner Tabellen ein Datum, aber ich möchte, dass es immer der erste des Monats ist. Daher versuche ich, einen Trigger zu erstellen, der jetzt () erscheint und dann den Tag durch eine 1 ersetzt.

33
Gargoyle

Sie können den Ausdruck date_trunc('month', current_date) verwenden. Demonstriert mit einer SELECT-Anweisung. . .

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

Um die Uhrzeit zu entfernen, wird das Datum als Datum angezeigt.

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

Wenn Sie sicher sind, dass diese Spalte immer nur den ersten eines Monats speichern soll, sollten Sie auch eine CHECK-Einschränkung verwenden.

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: Neue Zeile für Relation "foo" verstößt gegen die Prüfbedingung "foo_first_of_month_check" 
 DETAIL: Eine fehlerhafte Zeile enthält (2015-01-02) .

date_trunc() wird es tun.

SELECT date_trunc('MONTH',now())::DATE;

http://www.postgresql.org/docs/current/static/functions-datetime.html

23
bma

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

2017-12-01

1
Victorqedu

Fand dies, um den ersten Tag des Monats und das letzte Datum des Monats zu erhalten

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

Sie können TO_CHAR auch verwenden, um den ersten Tag des Monats zu erhalten:

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