Date out of range for timestamp

Ich würde gerne das Jahr aus einem Datum mit Jahr 1000000 rausextrahieren und schaffe es nicht.

select '1000000-01-01'::date; --> 1000000-01-01 -> ok!
select extract(year from ('1000000-01-01'::date)) -> date out of range for timestamp
select to_char('1000000-01-01'::date, 'YYYY') -> date out of range for timestamp

Der interpreter scheint das date in einen timestamp umzuwandeln.
Kann mir jemand helfen, wie ich das Jahr aus Daten rausextrahiere, deren Jahre gross sind.

ein Blick in die Doku:

The extract function retrieves subfields such as year or hour from date/time values. source must be a value expression of type timestamp, time, or interval. (Expressions of type date are cast to timestamp and can therefore be used as well.)

Was Dir bleibt wären Stringfunktionen. Aber mal ehrlich: bis das relevant ist ist noch etwas hin …

Danke für die Antwort. Ich habs vermutet, dass es nur mit basteln geht. Mit split_part ::date::text krieg ich es natürlich hin, aber sehr unschön.

Mit “bis das relevant ist ist noch etwas hin…” nehme ich an, sprichst Du das Datum an.
In meinem Fall kommen diese Daten berechtigter Weise vor.

Hmm, ich kenne solche Datumswerte nur um Werte zu speichern die “in der Zukunft” liegen. Wenn das hier der Fall ist, wäre infinity evtl. die bessere Wahl.

1 Like