sql >> Database >  >> RDS >> Oracle

Oracle datum naar string conversie

De gegevens in COL1 zijn in dd-mon-yy

Nee dat is het niet. Een DATE kolom doet niet elk formaat hebben. Het wordt alleen (impliciet) geconverteerd naar die representatie door uw SQL-client wanneer u het weergeeft.

Als COL1 echt een DATE is kolom met to_date() erop is nutteloos omdat to_date() converteert een string naar een DATE.

Je hebt alleen to_char() nodig, verder niets:

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

Wat er in jouw geval gebeurt, is dat het aanroepen van to_date() converteert de DATE in een tekenwaarde (waarbij het standaard NLS-formaat wordt toegepast) en dat vervolgens weer omzet naar een DATE. Door deze dubbele impliciete conversie gaat er onderweg wat informatie verloren.

Bewerken

Dus je hebt die grote fout gemaakt om een ​​DATE op te slaan in een karakterkolom. En daarom krijg je nu de problemen.

De beste (en om eerlijk te zijn:enige verstandige) oplossing is om die kolom te converteren naar een DATE . Vervolgens kunt u de waarden converteren naar elke gewenste weergave zonder dat u zich zorgen hoeft te maken over impliciete conversie van gegevenstypes.

Maar hoogstwaarschijnlijk is het antwoord "Ik heb dit model geërfd, ik moet ermee omgaan " (het is altijd zo, blijkbaar is niemand ooit verantwoordelijk voor het kiezen van het verkeerde datatype), dan moet je RR gebruiken in plaats van YY :

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

zou moeten lukken. Merk op dat ik ook mon . heb gewijzigd tot mm zoals uw voorbeeld is 27-11-89 die een nummer heeft voor de maand, geen "woord" (zoals NOV )

Zie voor meer details de handleiding:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215



  1. Hoe AT TIME ZONE werkt in PostgreSQL

  2. Meer showplan-verbeteringen? Ja graag!

  3. Wanneer zou u een functie met tabelwaarde gebruiken?

  4. Stel PDO in om standaard uitzonderingen te genereren