De gegevens in COL1 zijn in dd-mon-yy
Nee dat is het niet. Een DATE
kolom doet niet elk formaat hebben. Het wordt alleen (impliciet) geconverteerd naar die representatie door uw SQL-client wanneer u het weergeeft.
Als COL1 echt een DATE
is kolom met to_date()
erop is nutteloos omdat to_date()
converteert een string naar een DATE.
Je hebt alleen to_char() nodig, verder niets:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
Wat er in jouw geval gebeurt, is dat het aanroepen van to_date()
converteert de DATE
in een tekenwaarde (waarbij het standaard NLS-formaat wordt toegepast) en dat vervolgens weer omzet naar een DATE. Door deze dubbele impliciete conversie gaat er onderweg wat informatie verloren.
Bewerken
Dus je hebt die grote fout gemaakt om een DATE op te slaan in een karakterkolom. En daarom krijg je nu de problemen.
De beste (en om eerlijk te zijn:enige verstandige) oplossing is om die kolom te converteren naar een DATE
. Vervolgens kunt u de waarden converteren naar elke gewenste weergave zonder dat u zich zorgen hoeft te maken over impliciete conversie van gegevenstypes.
Maar hoogstwaarschijnlijk is het antwoord "Ik heb dit model geërfd, ik moet ermee omgaan " (het is altijd zo, blijkbaar is niemand ooit verantwoordelijk voor het kiezen van het verkeerde datatype), dan moet je RR
gebruiken in plaats van YY
:
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
zou moeten lukken. Merk op dat ik ook mon
. heb gewijzigd tot mm
zoals uw voorbeeld is 27-11-89
die een nummer heeft voor de maand, geen "woord" (zoals NOV )
Zie voor meer details de handleiding:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215