to_date() tar din strängparameter, matchar den med formatet du anger i den andra parametern och konstruerar ett datumfält från den. Datumfältet använder inte formatet du angav i den andra parametern - i själva verket kommer det att lagras med någon intern datarepresentation som inte har något format alls (ett tal, med all sannolikhet).
För att presentera ett format tillbaka i resultaten från ett datumfält kan du antingen:
- Låt klienten som kör frågan ställa in NLS-parametrarna (på sessionsnivå) för att tillhandahålla ett lokaliserat format, med en
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD';
uttalande), eller - Använd
to_char(..., 'YYYY-MM-DD')
runt ditt befintliga fält för att göra om datumet tillbaka till en sträng formaterad som du vill ha den. Där du ersätter...
med din nuvarande kolumndefinition i välj.
Tillvägagångssätt #1 sker redan, eftersom det redan kommer att finnas en NLS_DATE_FORMAT-uppsättning som producerar det aktuella formatet, men det är med ett format som du inte vill ha, så om du kan kontrollera det och ändra det där, kan du göra det som sätt. Om du inte kan och måste ha formatet på ett enda konsekvent annat sätt, kan #2 vara rätt väg att gå.