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

kiểm tra ngày hợp lệ được khai báo trong varchar2

Tôi muốn khắc phục sự cố thiết kế như một giải pháp khắc phục vĩnh viễn thay vì lãng phí thời gian cho giải pháp.

Thứ nhất, KHÔNG BAO GIỜ cửa hàng DATE dưới dạng VARCHAR2 . Tất cả chi phí này là do thiết kế của bạn có sai sót .

'20100231'

Làm thế quái nào mà ngày đó lại có thể là một ngày hợp lệ? Lịch nào có 31 ngày trong THÁNG 2?

Làm theo các bước sau:

  1. Thêm một cột mới với LOẠI DỮ LIỆU NGÀY.
  2. Cập nhật cột mới với các giá trị ngày từ cột cũ bằng TO_DATE .
  3. Thực hiện phép tính DATE bắt buộc trên cột DATE mới hoặc xử lý điều này trong câu lệnh UPDATE ở chính bước 2.
  4. Bỏ cột cũ.
  5. Đổi tên cột mới thành cột cũ.

CẬP NHẬT Thêm bản trình diễn

Thiết lập

SQL> CREATE TABLE t
  2      (ymd varchar2(8));

Table created.

SQL>
SQL> INSERT ALL
  2      INTO t (ymd)
  3           VALUES ('20101112')
  4      --INTO t (ymd)
  5      --     VALUES ('20100231')
  6      INTO t (ymd)
  7           VALUES ('20150101')
  8      INTO t (ymd)
  9           VALUES ('20160101')
 10  SELECT * FROM dual;

3 rows created.

SQL>
SQL> COMMIT;

Commit complete.

SQL>

Thêm cột mới:

SQL> ALTER TABLE t ADD (dt DATE);

Table altered.

SQL>

LÀM cập nhật được yêu cầu

SQL> UPDATE t
  2  SET dt =
  3    CASE
  4      WHEN to_date(ymd, 'YYYYMMDD') > SYSDATE
  5      THEN NULL
  6      ELSE to_date(ymd, 'YYYYMMDD')
  7    END;

3 rows updated.

SQL>
SQL> COMMIT;

Commit complete.

SQL>

Hãy kiểm tra:

SQL> SELECT * FROM t;

YMD      DT
-------- ---------
20101112 12-NOV-10
20150101 01-JAN-15
20160101

SQL>

Bỏ cột cũ:

SQL> ALTER TABLE t DROP COLUMN ymd;

Table altered.

SQL>

Đổi tên cột mới thành tên cột cũ

SQL> ALTER TABLE t RENAME COLUMN dt TO ymd;

Table altered.

SQL>

Bạn vừa khắc phục sự cố

SQL> SELECT * FROM t;

YMD
---------
12-NOV-10
01-JAN-15


SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. những gì xảy ra trong giai đoạn áp dụng chuẩn bị

  2. Tìm nguyên nhân gây ra lỗi deadlock từ tệp theo dõi oracle

  3. Tạo khóa tự động Hibernate với MySQL và Oracle

  4. làm thế nào để sử dụng xmltable trong oracle?

  5. Thu thập hàng loạt vào và thực hiện ngay lập tức trong Oracle