Dữ liệu trong COL1 là trong dd-mon-yy
Không nó không phải. Cột DATE
không không có bất kỳ định dạng nào. Nó chỉ được chuyển đổi (ngầm) thành biểu diễn đó bởi trình khách SQL của bạn khi bạn hiển thị nó.
Nếu COL1 thực sự là cột DATE
sử dụng to_date()
trên cột này là vô dụng vì to_date()
chuyển đổi chuỗi thành DATE.
Bạn chỉ cần to_char(), không có gì khác:
SELECT TO_CHAR(col1, 'mm/dd/yyyy')
FROM TABLE1
gì sẽ xảy ra trong trường hợp của bạn là gọi to_date()
chuyển đổi DATE
thành một giá trị ký tự (áp dụng định dạng mặc định NLS) và sau đó chuyển đổi đó trở lại một buổi hẹn hò. Do chuyển đổi ngầm ẩn này, một số thông tin bị mất trên đường.
Sửa
Vì vậy, bạn đã mang đến sai lầm lớn để lưu trữ một NGÀY trong một cột nhân vật. Và đó là lý do tại sao bạn nhận được các vấn đề bây giờ.
Giải pháp tốt nhất (và trung thực: chỉ hợp lý) là chuyển đổi cột đó thành DATE
. Sau đó, bạn có thể chuyển đổi các giá trị thành bất kỳ định nghĩa lại nào mà bạn muốn mà không phải lo lắng về việc chuyển đổi kiểu dữ liệu ngầm định.
Nhưng có lẽ hầu hết câu trả lời là "Tôi thừa hưởng mô hình này, tôi phải đối phó với nó" (nó luôn luôn là, dường như không ai chịu trách nhiệm về việc lựa chọn các kiểu dữ liệu sai), sau đó bạn cần phải sử dụng RR
thay của YY
:
SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1
nên thực hiện thủ thuật.Lưu ý rằng tôi cũng đã thay đổi mon
-mm
như ví dụ của bạn là 27-11-89
trong đó có một số trong tháng, không phải là một "từ" (như Tháng Mười Một)
Để biết thêm thông tin chi tiết xem hướng dẫn: http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215
Xin lỗi, đó là cột chuỗi. Tôi đã chỉnh sửa câu hỏi của tôi về lý do tại sao tôi làm điều đó. – Ram
@Ram: Không *** đặt ngày tháng vào các cột ký tự. Vấn đề bạn đang gặp phải hiện tại chỉ tồn tại vì bạn đã làm như vậy. –
@Ram: xem chỉnh sửa của tôi để có giải pháp có thể –