Data v COL1 jsou v dd-mon-yy
Ne, to není. A DATE
sloupec ne mít jakýkoli formát. Je pouze převeden (implicitně) na tuto reprezentaci vaším SQL klientem, když ji zobrazíte.
Pokud je COL1 skutečně DATE
pomocí to_date()
na něm je k ničemu, protože to_date()
převede řetězec na DATE.
Potřebujete pouze to_char(), nic jiného:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
Ve vašem případě se stane volání to_date()
převede DATE
na hodnotu znaku (aplikuje se výchozí formát NLS) a poté se převede zpět na DATUM. Kvůli této dvojité implicitní konverzi se cestou ztratí některé informace.
Upravit
Takže jste udělali tu velkou chybu, že jste uložili DATE do sloupce znaků. A proto teď máte problémy.
Nejlepší (a upřímně řečeno:jediné rozumné) řešení je převést tento sloupec na DATE
. Poté můžete hodnoty převést na libovolné znázornění, které chcete, aniž byste se museli starat o implicitní převod datových typů.
Nejpravděpodobnější je ale odpověď „Tento model jsem zdědil, musím se s tím vyrovnat " (vždy je, zjevně nikdo nikdy není zodpovědný za výběr špatného datového typu), pak musíte použít RR
místo YY
:
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
by měl udělat trik. Všimněte si, že jsem také změnil mon
na mm
jako váš příklad je 27-11-89
který má číslo pro měsíc, nikoli „slovo“ (jako NOV )
Další podrobnosti naleznete v příručce:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215