Datum har inget format – de representeras av 7- eller 8-byte .
SELECT DUMP( SYSDATE ) FROM DUAL;
Kan skriva ut:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Det här formatet är mycket användbart för datorer att jämföra datum men inte så användbart för människor; Så när SQL-klienten (SQL/plus, SQL-utvecklare, TOAD, etc) visar ett datum visar den inte byte utan visar det som en sträng.
Den gör detta genom att göra ett implicit anrop till TO_CHAR()
(eller någon annan intern metod för att strängsätta datum) och använder en standardformatmask för att utföra denna konvertering.
SQL/Plus och SQL Developer kommer att använda användarens sessionsparameter NLS_DATE_FORMAT
för att utföra denna konvertering - se det här svaret
angående detta.
Så din andra fråga konverteras implicit för att göra något som närmar sig detta (men, nästan säkert, mer effektivt):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL