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:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215