Oracle 10.2.0.5Cá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
Cách dễ nhất để xác định các hàng trong bảng có giá trị "không hợp lệ" trong cột DATE là gì. Bởi "không hợp lệ" ở đây những gì tôi có nghĩa là một đại diện nhị phân vi phạm các quy tắc của Oracle cho các giá trị ngày tháng.
Gần đây, tôi gặp sự cố với ngày không hợp lệ được lưu trữ trong cột.
tôi đã có thể sử dụng một ngữ truy vấn để tìm một hàng có vấn đề đặc biệt:
WHERE TO_CHAR(date_expr,'YYYYMMDDHH24MISS') = '00000000000000'
Trong trường hợp tôi đã có, các byte thế kỷ đã không hợp lệ ...
select dump(h.bid_close_date) from mytable h where h.id = 54321
Typ=12 Len=7: 220,111,11,2,1,1,1
Byte thế kỷ nên là 100 + hai chữ số thế kỷ. Trong trường hợp này, có thêm 100 được thêm vào, như thể giá trị thế kỷ là "120", tạo ra năm "12011". (Cách duy nhất tôi biết để có được các giá trị DATE không hợp lệ vào cơ sở dữ liệu là sử dụng OCI, sử dụng biểu diễn DATE 7 byte gốc.)
Trong trường hợp này, hàm TO_CHAR trả về một chuỗi có thể nhận dạng mà tôi có thể sử dụng để xác định giá trị DATE đáng giá.
Câu hỏi của tôi: có cách tiếp cận tổng quát hơn hoặc dễ dàng hơn (tốt nhất là sử dụng câu lệnh SQL SELECT) để xác định các hàng có giá trị "không hợp lệ" trong cột DATE.
Bạn có thể chọn tất cả các ngày không nằm trong phạm vi hợp lệ được chỉ định không? – ProfessionalAmateur
Có * là * một lỗi trong các phiên bản trước của Oracle (9.x?) Cho phép chia cho 0 giá trị INTERVAL để không bị phát hiện và tạo ra các giá trị không hợp lệ. –
Làm thế nào bạn quản lý để đưa chúng vào cơ sở dữ liệu ở nơi đầu tiên? –