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

Kiểm tra định dạng DATE trong Oracle

Tạo một hàm do người dùng xác định và cố gắng phân tích cú pháp ngày; nếu có bất kỳ ngoại lệ nào, hãy nắm bắt chúng và trả về chuỗi mặc định của bạn.

CREATE FUNCTION check_Date (
  datestring    VARCHAR2,
  format_mask   VARCHAR2 := 'FXMMDDYYYY',
  default_value VARCHAR2 := '00000000'
) RETURN VARCHAR2 DETERMINISTIC
IS
  INVALID_DATE EXCEPTION;
  PRAGMA EXCEPTION_INIT( INVALID_DATE, -20001 );

  p_date DATE;
BEGIN
  IF datestring IS NULL THEN
    RAISE INVALID_DATE;
  END IF;

  p_date := TO_DATE( datestring, format_mask );

  RETURN datestring;
EXCEPTION
  WHEN OTHERS THEN
    RETURN default_value;
END check_Date;
/

Thay thế :

SELECT CASE
       WHEN NOT REGEXP_LIKE( datestring, '^(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{4}$' )
       THEN '00000000'
       WHEN TO_CHAR(
              ADD_MONTHS(
                TRUNC( TO_DATE( SUBSTR( datestring, 5 ), 'YYYY' ), 'YYYY' ),
                TO_NUMBER( SUBSTR( datestring, 1, 2 ) ) - 1
              )
              + TO_NUMBER( SUBSTR( datestring, 3, 2 ) ) - 1,
              'MMDDYYYY'
            )
            <> datestring
       THEN '00000000'
       ELSE datestring
       END
FROM   your_table


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sống sót sau một cuộc kiểm tra Oracle

  2. Truyền mảng cho thủ tục Oracle từ c #

  3. Làm cách nào để ngăn thông báo hoàn tất thành công thủ tục PL / SQL trong sqlplus?

  4. tự tham gia và tham gia bên trong

  5. Làm cách nào để cập nhật giá trị cột của một bảng với giá trị cột của bảng khác?