Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chuyển đổi ngày thành chuỗi trong Oracle

Dữ liệu trong COL1 ở dạng dd-mon-yy

Không, không phải đâu. DATE cột không không có bất kỳ định dạng nào. Nó chỉ được máy khách SQL của bạn chuyển đổi (ngầm hiểu) thành biểu diễn đó khi bạn hiển thị nó.

Nếu COL1 thực sự là DATE cột sử dụng to_date() trên đó là vô ích vì to_date() chuyển đổi một chuỗi thành DATE.

Bạn chỉ cần to_char (), không cần gì khác:

SELECT TO_CHAR(col1, 'mm/dd/yyyy') 
FROM TABLE1

Điều gì 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 NLS mặc định) và sau đó chuyển đổi giá trị đó trở lại DATE. Do chuyển đổi ngầm kép này, một số thông tin sẽ bị mất trên đường đi.

Chỉnh sửa

Vì vậy, bạn đã mắc phải sai lầm lớn đó khi lưu trữ NGÀY trong cột ký tự. Và đó là lý do tại sao bạn gặp phải vấn đề bây giờ.

Giải pháp tốt nhất (và thành thật mà nói: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ỳ bản trình bày 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 đương đầu với nó "(luôn luôn là như vậy, dường như không ai chịu trách nhiệm về việc chọn sai kiểu dữ liệu), khi đó bạn cần sử dụng RR thay vì YY :

SELECT TO_CHAR(TO_DATE(COL1,'dd-mm-rr'), 'mm/dd/yyyy')
FROM TABLE1

nên làm thủ thuật. Lưu ý rằng tôi cũng đã thay đổi mon thành mm như ví dụ của bạn là 27-11-89 có một số cho tháng, không phải một "từ" (như NOV )

Để biết thêm chi tiết, hãy xem hướng dẫn:http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm#SQLRF00215



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. truyền mảng số nguyên cho thủ tục oracle bằng c #

  2. ORA-38868

  3. Lặp lại một Tập kết quả bằng JDBC cho Oracle mất rất nhiều thời gian khoảng 16 giây?

  4. Oracle’s Containers cho J2EE (OC4J) trong R12

  5. Cách tính toán sự khác biệt giữa hai dấu thời gian trong Oracle