Dataene i COL1 er i dd-man-åå
Nej det er ikke. En DATE
kolonne ikke har et hvilket som helst format. Den konverteres kun (implicit) til denne repræsentation af din SQL-klient, når du viser den.
Hvis COL1 virkelig er en DATE
kolonne ved hjælp af to_date()
på det er ubrugeligt, fordi to_date()
konverterer en streng til en DATO.
Du behøver kun to_char(), intet andet:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
Det, der sker i dit tilfælde, er at kalde to_date()
konverterer DATE
til en tegnværdi (anvender standard NLS-formatet) og konverterer derefter det tilbage til en DATO. På grund af denne dobbelte implicitte konvertering går nogle oplysninger tabt undervejs.
Rediger
Så du lavede den store fejl at gemme en DATO i en tegnkolonne. Og det er derfor, du får problemerne nu.
Den bedste (og for at være ærlig:kun fornuftige) løsning er at konvertere den kolonne til en DATE
. Derefter kan du konvertere værdierne til enhver repræsentation, du ønsker, uden at bekymre dig om implicit datatypekonvertering.
Men svaret er sandsynligvis "Jeg har arvet denne model, jeg må klare det " (det er det altid, tilsyneladende er ingen nogensinde ansvarlig for at vælge den forkerte datatype), så skal du bruge RR
i stedet for YY
:
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
burde gøre tricket. Bemærk, at jeg også har ændret mon
til mm
som dit eksempel er 27-11-89
som har et tal for måneden, ikke et "ord" (som NOV )
For flere detaljer se manualen:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215