Oracle
 sql >> база данни >  >> RDS >> Oracle

Почистване на колона за дата на Oracle

Това е една от причините съхраняването на информация за дата в символно поле да е толкова лоша идея.

Най-лесният вариант е да създадете функция, която се опитва да преобразува низа в дата, като използва форматите в какъвто и приоритетен ред да имате (т.е. е 010203 2 януари 2003 г. или 3 февруари 2001 г. или нещо друго) и улавя изключенията. Нещо като

CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 )
  RETURN DATE
IS
  l_date DATE;
BEGIN
  l_date := to_date( p_str, 'YYYYMMDD' );
  RETURN l_date;
EXCEPTION
  WHEN others THEN
    BEGIN
      l_date := to_date( p_str, 'MM/DD/YYYY' );
      RETURN l_date;
    EXCEPTION 
      WHEN others
      THEN
        RETURN null;
    END;
END;

който работи нещо като

SQL> CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 )
  2    RETURN DATE
  3  IS
  4    l_date DATE;
  5  BEGIN
  6    l_date := to_date( p_str, 'YYYYMMDD' );
  7    RETURN l_date;
  8  EXCEPTION
  9    WHEN others THEN
 10      BEGIN
 11        l_date := to_date( p_str, 'MM/DD/YYYY' );
 12        RETURN l_date;
 13      EXCEPTION
 14        WHEN others
 15        THEN
 16          RETURN null;
 17      END;
 18  END;
 19  /

Function created.

SQL> select my_to_date( '19000101' ) from dual;

MY_TO_DAT
---------
01-JAN-00

SQL> ed
Wrote file afiedt.buf

  1* select my_to_date( '01/02/2005' ) from dual
SQL> /

MY_TO_DAT
---------
02-JAN-05

Разбира се, ще трябва да кодирате пълния набор от валидни формати за дата в кода си, аз се занимавам само с първите два в списъка ви.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да върнете списък с поддържани езици в Oracle

  2. Функция RTRIM() в Oracle

  3. SET NULL:Посочете низ, който да се връща всеки път, когато се появи нулева стойност в SQLcl / SQL*Plus

  4. Как да клонирате среда R12.2

  5. Oracle:LONG или CLOB?