Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Data Oracle para conversão de string


Os dados em COL1 estão em dd-seg-aa

Não, não é. Uma DATE coluna não tem qualquer formato. Ele só é convertido (implicitamente) para essa representação pelo cliente SQL quando você o exibe.

Se COL1 for realmente um DATE coluna usando to_date() nele é inútil porque to_date() converte uma string em um DATE.

Você só precisa de to_char(), nada mais:
SELECT TO_CHAR(col1, 'mm/dd/yyyy') 
FROM TABLE1

O que acontece no seu caso é que chamar to_date() converte o DATE em um valor de caractere (aplicando o formato NLS padrão) e, em seguida, convertendo-o de volta para uma DATA. Devido a essa dupla conversão implícita, algumas informações são perdidas no caminho.

Editar

Então você cometeu aquele grande erro de armazenar uma DATA em uma coluna de caracteres. E é por isso que você tem os problemas agora.

A melhor (e para ser honesto:apenas sensata) solução é converter essa coluna em um DATE . Em seguida, você pode converter os valores em qualquer representação que desejar sem se preocupar com a conversão implícita de tipo de dados.

Mas provavelmente a resposta é "Eu herdei esse modelo, tenho que lidar com isso " (sempre é, aparentemente ninguém nunca é responsável por escolher o tipo de dados errado), então você precisa usar RR em vez de YY :
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1

deve fazer o truque. Observe que também alterei mon para mm como seu exemplo é 27-11-89 que tem um número para o mês, não uma "palavra" (como NOV )

Para mais detalhes consulte o manual:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215