Konvertierung von Datum mit 5-Stelliger Jahresangabe

Hallo,

ich möchte hier folgendes Problem beschreiben und evtl. um Abhilfe bitten, wenn es denn ein workaround dazu gibt.

Folgendes Scenario:

  • in ein “date” Feld einer Tabelle wird auf mysteriöse Weise folgender Wert geschrieben “20144-07-22” (habe das geprüft und es geht problemlos mit pgadmin)
  • in einer VB 6.0 Anwendung, die mit ODBC arbeitet, erscheint aber ein anderer Wert: “19.08.2014” oder in der anderen Schreibweise “2014-08-19”.
  • Umgebung besteht aus Postgresql 9.3.4 und PostgreSQL ANSI 9.03.02.10 (ODBC), Microsoft Dao 3.6

Ich habe Test mit verschiedenen Datumsangaben durchgeführt und es deutet alles darauf hin, dass bei 5-Stelligen Jahresangaben die letzte Zahl einfach abgeschnitten wird und der aktuelle Tag und Monat geliefert wird.
Dieses Datum würde sich jeden Tag ändern, was u.U. zu Problemen führen kann, wenn ein Konstantes Datum erwartet wird. Es war mir auch nicht möglich, irgendwelche Fehlermeldung in der Anwendung oder ODBC-Ablaufverfolgung festzustellen.
Im Recordset wird gleich das konvertierte Datum geliefert ohne das man es auf irgendeine Weise überprüfen könnte.

Weiß jemand, ob es eine Einstellung gibt, die es in solchen Fällen verhindert, dass “irgendein” Datum geliefert wird oder ist es ein Bug in den ODBC-Teibern?

Viele Grüße

P.S. weiteres Beispiel: aus “05.05.10000” wird “19.08.1000” wobei “05.05.9999” nicht umgewandelt wird.

Warum auch nicht, es ist ein valides Datum:

test=*# select '20144-07-22'::date;
    date
-------------
 20144-07-22
(1 row)



  • in einer VB 6.0 Anwendung, die mit ODBC arbeitet, erscheint aber ein anderer Wert: “19.08.2014” oder in der anderen Schreibweise “2014-08-19”.

Ja was denn nun?

  • Umgebung besteht aus Postgresql 9.3.4 und PostgreSQL ANSI 9.03.02.10 (ODBC), Microsoft Dao 3.6

Ich habe Test mit verschiedenen Datumsangaben durchgeführt und es deutet alles darauf hin, dass bei 5-Stelligen Jahresangaben die letzte Zahl einfach abgeschnitten wird und der aktuelle Tag und Monat geliefert wird.
Dieses Datum würde sich jeden Tag ändern, was u.U. zu Problemen führen kann, wenn ein Konstantes Datum erwartet wird. Es war mir auch nicht möglich, irgendwelche Fehlermeldung in der Anwendung oder ODBC-Ablaufverfolgung festzustellen.
Im Recordset wird gleich das konvertierte Datum geliefert ohne das man es auf irgendeine Weise überprüfen könnte.

Weiß jemand, ob es eine Einstellung gibt, die es in solchen Fällen verhindert, dass “irgendein” Datum geliefert wird oder ist es ein Bug in den ODBC-Teibern?

Ich kann es nicht nachvollziehen. Nutze aber auch kein ODBC oder so. Das kann also im ODBC-Treiber liegen oder in der Applikation. Du kannst einen Check-Constraint auf die Spalte setzen, daß das Datum nur in bestimmten Bereichen liegen darf. Das Jahr 20144 scheint ja für Dich nicht hinreichend relevant zu sein.

Hallo Naidrock,

ich kann zwar keinen Lösungsansatz bieten, möchte aber das Verhalten bestätigen.

Bsp.: insert into tmp(datum) values(‘20144-07-22’)
pgAdmin zeigt das Datum korrekt an, PostgreSQL macht also alles richtig.
Anzeige in MS Access über PostgreSQL ODBC Driver(ANSI) 8.04.02.00 zeigt bei mir 20.08.2014
Da “korrigiert” entweder der Treiber oder Access.
Im ODBC Datenquellen-Administrator gibts eine Ablaufverfolgung. Vielleicht hilft dir diese weiter.

Grüße
Uli