sql >> Databáze >  >> RDS >> Oracle

Oracle převod data na řetězec

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



  1. Najděte jiné znaky než ASCII ve sloupcích varchar pomocí SQL Server

  2. Oznamujeme repmgr 2.0

  3. Minimalizace dopadu rozšíření sloupce IDENTITY – část 2

  4. Top 5 funkcí, které musí vaše platforma pro sledování výkonu databáze SQL Server poskytovat