sql >> Databasteknik >  >> RDS >> Oracle

Oracle datum till sträng konvertering

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



  1. Utfasad:mysql_connect()

  2. Ställer in Django för att använda MySQL

  3. Konvertera NULL-värden till kolumnens standardvärde när du infogar data i SQLite

  4. MySQL hoppa över de 10 första resultaten