to_char to_timestamp seltsames verhalten

heute wollte ich eine konvertierung machen.
dabei ist mir folgender sachverhalt aufgestossen.

kann mir jemand mal erklären warum diese umwandlung nicht klappt?

select to_char(26.0406 * 10000, ‘999999’), to_timestamp( to_char(26.0406 * 10000, ‘999999’) , ‘DDMMYY’), to_timestamp( ‘260406’ , ‘DDMMYY’)

ergebnis:
260406 2045-01-03 00:00:00.0 2006-04-26 00:00:00.0

das ergebnis wie ich es verstehe:
erste spalte, der string (varchar) wie ich es erwarten würde nach der umwandlung in einen char.
zweite spalte das seltsame ergebnis.
dritte spalte wie ich es erwarten würde wenn ich den string aus der ersten spalte in die to_timestamp funktion reingebe.

ich versteh hier die dokumentation wohl ein bisschen falsch…

danke!!



test=*# select 'X' || to_char(260406::int, '999999') || 'X';
 ?column?
-----------
 X 260406X
(1 row)

-- also sollte man mal das leerzeichen entsorgen
test=*# select to_timestamp( trim(both from to_char(260406::int, '999999')) , 'DDMMYY');
      to_timestamp
------------------------
 2006-04-26 00:00:00+02
(1 row)

Andreas

danke für die erklärenden worte.
jetzt hab auch ich die “falsche” formatierung verstanden.


allerdings stellt sich jetzt für mich die frage:
warum kommt da ein leerzeichen raus?

ich hatte mir schon so was gedacht, aber ich hab am ende des strings nachgeschaut. am anfang hab ich es erst gar nicht vermutet, gut mit deinem test wär mir das auch aufgefallen :astonished:

Doku nicht gelesen?

test=*# select 'X' || to_char(260406::int, '999999') || 'X';
 ?column?
-----------
 X 260406X
(1 row)

test=*# select 'X' || to_char(260406::int, 'FM999999') || 'X';
 ?column?
----------
 X260406X
(1 row)

PostgreSQL: Documentation: Manuals: PostgreSQL 8.2: Data Type Formatting Functions

Man beachte Table 9-22. Template Pattern Modifiers for Date/Time Formatting


Andreas

ich hab halt nicht die station für to_timestamp gelesen, wenn ich quasi noch bei to_char hänge:

to_char(double precision, text) text convert real/double precision to string to_char(125.8::real, ‘999D9’)

aus der section 9-20 hat mir die info gegeben dass ich hier 999999 eingeben soll.
dass bei dem ergebnis aber eine führende 0 rauskommt konnt ich mir nicht denken. und die FM vorschrift liest sich für mich wenn ich die in zusammenhang mit to_timestamp benutzen möchte:
Table 9-22. Template Pattern Modifiers for Date/Time Formatting

aber was ich daraus lerne ist:
einfach mal schauen was wirklich rauskommt, inklusive aller führenden leerzeichen und folgenden…

wird mir in zukunft mit sicherheit einiges an arbeit sparen :rolleyes:


nochmal danke für die schnelle und gute hilfe!!