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

Cách xác định các giá trị không hợp lệ (bị hỏng) được lưu trữ trong các cột Oracle DATE

Đây là một kịch bản khá bất thường (mặc dù tôi đã từng gặp điều gì đó tương tự một lần trước đây). Vấn đề phổ biến hơn là tìm ngày không hợp lệ được giữ dưới dạng chuỗi trong cột ngày. Bạn có thể điều chỉnh giải pháp cho điều đó cho phù hợp với tình huống của mình, bằng cách xây dựng trình xác thực ngày tháng của riêng bạn.

Một cái gì đó như thế này:

create or replace function is_a_date 
    ( p_date in date )
    return varchar2
is
    d date;
begin
    d := to_date(to_char(p_date,  'SYYYYMMDDHH24MISS'),  'SYYYYMMDDHH24MISS') ;
    if d != p_date then
        return 'not a proper date';
    else
        return 'good date';
    end if;
exception
    when others  then
        return 'not a date';
end;
/ 

Điều này chuyển đổi một ngày thành một chuỗi và quay lại một lần nữa. Nó bắt các ngoại lệ được ném ra bởi ngày đúc. Nếu sản phẩm cuối cùng không giống với ngày nhập thì có lẽ điều gì đó đã bị mất trong bản dịch; thành thật mà nói, tôi không chắc liệu ngày tháng 12011 có được truyền thành công đến một chuỗi hay không, vì vậy đây là một cách tiếp cận thắt lưng. Sẽ hơi phức tạp khi viết tiện ích này mà không có một số dữ liệu thử nghiệm!

Truy vấn này sẽ xác định tất cả các ngày không hợp lệ:

 select h.id, dump(h.bid_close_date)
 from mytable h 
 where h.bid_close_date is not null
 and is_a_date(h.bid_close_date) != 'good date';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mệnh đề Oracle SQL Where để tìm các bản ghi ngày cũ hơn 30 ngày

  2. Cách hiển thị lỗi trong sqlplus

  3. Tôi có nên xóa hoặc vô hiệu hóa một hàng trong cơ sở dữ liệu quan hệ không?

  4. Công cụ tích hợp dữ liệu Oracle (ODI)

  5. Nhận ID của bản ghi được chèn lần cuối trong oracle db