sql >> Databasteknik >  >> RDS >> Oracle

konvertera åååå-mm-dd till mm/dd/åååå

Datum har inget format – de representeras internt av 7- eller 8-byte . Det är först när ett klientprogram passeras ett datum som det klientprogrammet (potentiellt) ger det ett format.

Standardsträngformatet för datum i SQL/Plus eller SQL Developer ställs in av NLS_DATE_FORMAT sessionsparameter. Andra klienter har vanligtvis parametrar som du kan ställa in för standarddatumformatet (om de inte också använder NLS inställningar). Tänk dock på att NLS_DATE_FORMAT är en sessionsparameter så den tillhör användarens session och flera användare kan var och en ha olika värde för parametern som motsvarar hur de har ställt in den.

Om du vill ge ett datum ett specifikt format måste du konvertera det till en sträng:

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

Varför din fråga inte fungerar :

TO_DATE( value, frmt ) förväntar sig ett strängvärde och en formatmask. Den inre TO_DATE('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS') är helt giltig och returnerar DATE '2016-05-01' .

Men den yttre TO_DATE() skickas sedan till DATE typ du just har genererat och strängformatet (istället för de två strängarna som den förväntar sig). Oracle kommer implicit anropa TO_CHAR() på datumet och använd NLS_DATE_FORMAT sessionsparameter som formatmask. Detta genererar en sträng från datumet och, givet felet, värdet på NLS_DATE_FORMAT är inte MM/DD/YYYY HH24:MI:SS så när den yttre TO_DATE() försöker analysera den implicit skapade strängen den misslyckas eftersom det första numret den läser är ogiltigt i en månad.



  1. PHP eval()-kod mellan <?php ?> från databasen

  2. hur man ger samma serienummer för en grupp av poster i mysql

  3. PHP MySQL PDO:hur man bevarar inledande nollor i int-kolumner med nollfyllning

  4. se till att PDO-hämtningsmetodens resultat falskt är ett fel eller tomt resultat