Dane w COL1 są w formacie dd-mon-yy
Nie, nie jest. DATE kolumna nie mieć dowolny format. Jest on konwertowany (niejawnie) na tę reprezentację tylko przez klienta SQL podczas jego wyświetlania.
Jeśli COL1 to naprawdę DATE kolumna za pomocą to_date() na nim jest bezużyteczne, ponieważ to_date() konwertuje ciąg na DATE.
Potrzebujesz tylko to_char(), nic więcej:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
To, co dzieje się w twoim przypadku, to wywołanie to_date() konwertuje DATE na wartość znakową (stosując domyślny format NLS), a następnie konwertując ją z powrotem na DATĘ. Z powodu tej podwójnej niejawnej konwersji niektóre informacje są tracone po drodze.
Edytuj
Więc popełniłeś wielki błąd, przechowując DATE w kolumnie znaków. I dlatego teraz masz problemy.
Najlepszym (i szczerze mówiąc:jedynym sensownym) rozwiązaniem jest przekonwertowanie tej kolumny na DATE . Następnie możesz przekonwertować wartości na dowolną reprezentację, którą chcesz, nie martwiąc się o niejawną konwersję typu danych.
Ale najprawdopodobniej odpowiedź brzmi:„Odziedziczyłem ten model, muszę sobie z tym poradzić " (zawsze tak jest, najwyraźniej nikt nigdy nie jest odpowiedzialny za wybór złego typu danych), musisz użyć RR zamiast YY :
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
powinien załatwić sprawę. Zauważ, że zmieniłem również mon do mm Twoim przykładem jest 27-11-89 który ma numer miesiąca, a nie „słowo” (np. NOV )
Więcej informacji znajdziesz w instrukcji:https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215