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

konvertering af åååå-mm-dd til mm/dd/åååå

Datoer har ikke et format - de er repræsenteret internt af 7- eller 8-bytes . Det er kun, når et klientprogram har passeret en dato, at klientprogrammet (potentielt) giver det et format.

Standardstrengformatet for datoer i SQL/Plus eller SQL Developer er angivet af NLS_DATE_FORMAT sessionsparameter. Andre klienter vil typisk have parametre, som du kan indstille til standarddatoformatet (hvis de ikke også bruger NLS indstillinger). Vær dog opmærksom på, at NLS_DATE_FORMAT er en sessionsparameter, så den hører til brugerens session, og flere brugere kan hver have en forskellig værdi for parameteren svarende til, hvordan de har indstillet den.

Hvis du vil give en dato et bestemt format, skal du konvertere den til en streng:

SELECT TO_CHAR( DATE '2016-05-01', 'MM/DD/YYYY HH24:MI:SS' )
FROM   DUAL;

Hvorfor din forespørgsel ikke virker :

TO_DATE( value, frmt ) forventer en strengværdi og en formatmaske. Den indre TO_DATE('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS') er fuldstændig gyldig og returnerer DATE '2016-05-01' .

Men den ydre TO_DATE() videregives derefter DATE type, du lige har genereret, og strengformatet (i stedet for de to strenge, den forventer). Oracle vil implicit kalde TO_CHAR() på datoen og brug NLS_DATE_FORMAT sessionsparameter som formatmasken. Dette genererer en streng fra datoen og, givet fejlen, værdien af ​​NLS_DATE_FORMAT er ikke MM/DD/YYYY HH24:MI:SS så når den ydre TO_DATE() forsøger at parse den implicit oprettede streng, den mislykkes, da det første tal, den læser, er ugyldigt i en måned.



  1. hæve applikationsfejl Trigger i MySQL DBMS

  2. mysql opdatering med regexp

  3. Tjek, om RPC Out er aktiveret på en forbundet server

  4. Hvad er forskellen mellem pg_table_size, pg_relation_size og pg_total_relation_size? (PostgreSQL)