sql >> Database teknologi >  >> RDS >> Oracle

Oracle dato til streng konvertering

Dataene i COL1 er i dd-man-åå

Nej det er ikke. En DATE kolonne ikke har et hvilket som helst format. Den konverteres kun (implicit) til denne repræsentation af din SQL-klient, når du viser den.

Hvis COL1 virkelig er en DATE kolonne ved hjælp af to_date() på det er ubrugeligt, fordi to_date() konverterer en streng til en DATO.

Du behøver kun to_char(), intet andet:

SELECT TO_CHAR(col1, 'mm/dd/yyyy') 
FROM TABLE1

Det, der sker i dit tilfælde, er at kalde to_date() konverterer DATE til en tegnværdi (anvender standard NLS-formatet) og konverterer derefter det tilbage til en DATO. På grund af denne dobbelte implicitte konvertering går nogle oplysninger tabt undervejs.

Rediger

Så du lavede den store fejl at gemme en DATO i en tegnkolonne. Og det er derfor, du får problemerne nu.

Den bedste (og for at være ærlig:kun fornuftige) løsning er at konvertere den kolonne til en DATE . Derefter kan du konvertere værdierne til enhver repræsentation, du ønsker, uden at bekymre dig om implicit datatypekonvertering.

Men svaret er sandsynligvis "Jeg har arvet denne model, jeg må klare det " (det er det altid, tilsyneladende er ingen nogensinde ansvarlig for at vælge den forkerte datatype), så skal du bruge RR i stedet for YY :

SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1

burde gøre tricket. Bemærk, at jeg også har ændret mon til mm som dit eksempel er 27-11-89 som har et tal for måneden, ikke et "ord" (som NOV )

For flere detaljer se manualen:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215



  1. Tilføj førende og efterfølgende nuller i SQL Server

  2. Mysql-forespørgsel til dynamisk at konvertere rækker til kolonner

  3. Hvordan afrundes et gennemsnit til 2 decimaler i PostgreSQL?

  4. Postgres rekursiv forespørgsel med row_to_json