sql >> Databáze >  >> RDS >> Oracle

převod yyyy-mm-dd na mm/dd/yyyy

Data nemají formát – jsou interně reprezentována 7 nebo 8 bajtů . Tento klientský program (potenciálně) mu dá formát pouze tehdy, když je klientskému programu předáno datum.

Výchozí formát řetězce pro data v SQL/Plus nebo SQL Developer je nastaven pomocí NLS_DATE_FORMAT parametr relace. Ostatní klienti budou mít obvykle parametry, které můžete nastavit pro výchozí formát data (pokud také nepoužívají NLS nastavení). Dejte si však pozor na NLS_DATE_FORMAT je parametr relace, takže patří k relaci uživatele a více uživatelů může mít každý jinou hodnotu parametru odpovídající tomu, jak jej nastavili.

Pokud chcete datu přiřadit konkrétní formát, budete jej muset převést na řetězec:

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

Proč váš dotaz nefunguje :

TO_DATE( value, frmt ) očekává hodnotu řetězce a masku formátu. Vnitřní TO_DATE('2016-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS') je dokonale platné a vrátí DATE '2016-05-01' .

Nicméně vnější TO_DATE() je pak předáváno DATE typ, který jste právě vygenerovali, a formát řetězce (místo dvou očekávaných řetězců). Oracle implicitně zavolá TO_CHAR() na datum a použijte NLS_DATE_FORMAT parametr session jako masku formátu. Toto generuje řetězec z data a, vzhledem k chybě, z hodnoty NLS_DATE_FORMAT není MM/DD/YYYY HH24:MI:SS takže když vnější TO_DATE() pokusí se analyzovat implicitně vytvořený řetězec selže, protože první číslo, které přečte, je po dobu jednoho měsíce neplatné.



  1. Získávání chyby 1366 Nesprávná celočíselná hodnota:'1' při importu souboru

  2. Jak změnit řazení na úrovni serveru spuštěné instance SQL Server

  3. Jak získat nejčastější hodnotu SQL

  4. Klíč MySQL UNIQUE nefunguje