Substr auf ein Datumsfeld

Hallo Zusammen, ich hole mir vom Tagesdatum (Systemdatum) das Jahr und möchte davon zwei Jahre abziehen.
Wenn ich aber vom Tagesdatum mit String das Jahr herausschneide, dann kann ich anschließend von einem String keine zwei mehr abziehen :frowning:

  1. Lösungsansatz
    SUBSTR ( to_date(‘2023-03-21’ , ‘YYYY-MM-DD’) , 1 , 4) ==> das funktioniert ==> liefert mir ‘2023’
    Jetzt kann ich aber hiervon keine 2 Jahre mehr abziehen.

2.Lösungsansatz
to_date(‘2023-03-21’ , ‘YYYY-MM-DD’) + interval ‘+24 months’ ==> liefert folgendes Ergebnis
2021-03-21 00:00:00.000 ==> hier kann ich aber das Jahr nicht mit substr rausschneiden
select substring( (to_date(‘2023-03-21’ , ‘YYYY-MM-DD’) + interval ‘-24 months’),1,4)

Fehlermeldung;
SQL-Fehler [42883]: ERROR: function pg_catalog.substring(timestamp without time zone, integer, integer) does not exist
Hinweis: No function matches the given name and argument types. You might need to add explicit type casts.
Position: 8

Danke für eure Unterstützung :slight_smile:

postgres=# select substr(to_date('2023-03-21' , 'YYYY-MM-DD')::text,1,4)::int -2;
 ?column? 
----------
     2021
(1 row)

postgres=# 

und kürzer:

postgres=# select substr(current_date::text,1,4)::int-2;
 ?column? 
----------
     2021
(1 row)

postgres=# 

Danke, ich probiere es mal aus :slight_smile:

Das funktioniert leide nicht, weil wenn ich jetzt in meiner where Bedingung, diese Zahl mit einer anderen zahl vergleiche, dann stimmt das Format nicht.
er vergleicht 2023 mit 2.023

image

wenn Du erklären würdest, was Du da treibst, könnte man sicherlich helfen. Wir wissen jetzt nur, daß Du 2023 mit 2.023 vergleichen willst:

postgres=# select substr(current_date::text,1,4)::float / 1000 = 2.023;
 ?column? 
----------
 t
(1 row)

postgres=# 

Aber warum will man das tausendstel einer Jahreszahl mit einem numerischen Wert vergleichen?

nein ich will nicht 2023 mit 2.023 vergleichen. Das Ergebnis des select (select substr(to_date(‘2023-03-21’ , ‘YYYY-MM-DD’)::text,1,4)::int -2;
?column? ) von dir, liefert bei mir das Ergebnis 2.023 und das kann ich nicht mit 2023 vergleichen.
Ich brauche nicht das Ergebnis “2.023” sonder 2023 :slight_smile:

wenn Du mit irgend einer GUI arbeitest: laß die mal weg und nehme psql. Und dann wirst Du mein Beispiel nachvollziehen können. Wenn Deine GUI da was verbockt (geht schon los mit ’ statt ') dann ist das kein Problem von PostgreSQL sondern von Deiner GUI.

:slight_smile: Danke, ich habe es jetzt hinbekommen, aber du hats mir sehr geholfen.
Die Funktionalität mit :: int bzw. ::text kannte ich noch nicht.

1 „Gefällt mir“

ja, sog. CAST-Operator. Damit kann man Datentypen konvertieren. Eine substr() - Funktion liefert halt einen STRING. Wenn ich damit rechnen will, muß ich es konvertieren, hier in ein INTEGER.

Verwende doch extract() wenn Du das Jahr als Zahl benötigst:

 extract(year from current_date) + 2

oder

 extract(year from current_date + interval '2 year')
1 „Gefällt mir“

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.