Datan i COL1 är i dd-mån-åå
Nej det är det inte. Ett DATE
kolumnen inte ha vilket format som helst. Den konverteras endast (implicit) till den representationen av din SQL-klient när du visar den.
Om COL1 verkligen är en DATE
kolumn med to_date()
på den är värdelös eftersom to_date()
konverterar en sträng till ett DATUM.
Du behöver bara to_char(), inget annat:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
Vad som händer i ditt fall är att anropet to_date()
konverterar DATE
till ett teckenvärde (med standard NLS-format) och sedan konvertera det tillbaka till ett DATUM. På grund av denna dubbla implicita konvertering går viss information förlorad på vägen.
Redigera
Så du gjorde det stora misstaget att lagra ett DATUM i en teckenkolumn. Och det är därför du får problemen nu.
Den bästa (och för att vara ärlig:enda vettiga) lösningen är att konvertera den kolumnen till ett DATE
. Sedan kan du konvertera värdena till vilken representation du vill utan att behöva oroa dig för implicit datatypkonvertering.
Men förmodligen är svaret "Jag ärvde den här modellen, jag måste klara av den " (det är det alltid, tydligen är ingen någonsin ansvarig för att välja fel datatyp), då måste du använda RR
istället för YY
:
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
borde göra susen. Observera att jag också ändrade mon
till mm
som ditt exempel är 27-11-89
som har ett nummer för månaden, inte ett "ord" (som NOV )
För mer information se manualen:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215