PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL, wie man den Intervallwert '2 Tage' konkatiert

Ein Teil des Problems besteht darin, dass der Standard-SQL-Ausdruck für Intervalle die Zahl in Anführungszeichen setzt, aber nicht die Schlüsselwörter. Sie müssen also vorsichtig sein.

select current_date, current_date + interval '2' day;
--
2012-02-21   2012-02-23 00:00:00

In PostgreSQL funktionieren auch Anführungszeichen wie „2 Tag“ und „2 Tage“. Sie könnten also denken, dass '2' || 'Tage' wären äquivalent, sind es aber nicht.

select current_date, current_date + interval '2' || ' days';
--
2012-02-21   2012-02-21 00:00:02 days

Die Lösung besteht, wie A.H. sagte, darin, die Ergebniszeichenfolge als Intervall umzuwandeln.

Sie können anstelle von 2 auch eine Variable verwenden. Dadurch wird ein Kalender für 2012 erstellt.

-- 0 to 365 is 366 days; 2012 is a leap year.
select ('2012-01-01'::date + (n || ' days')::interval)::date calendar_date
from generate_series(0, 365) n;

Ich verwende diese endgültige Umwandlung bis heute, weil Datum + Intervall einen Zeitstempel zurückgibt.