REGEXP_LIKE для всего, что не похоже на ММ / ДД / ГГГГ

Какое регулярное выражение будет использоваться для перехвата чего-либо в базе данных, кроме выражения MM / DD / YYYY. (Я хочу, чтобы все, кроме указанного выше формата, могло быть dd-mon-yy или yyyy / mm / dd и т. Д.)

Я использую запрос регулярного выражения ниже

select birth_date FROM table_name where not regexp_like (birth_date, '[0-9][0-9]/[0-9][0-9]/[0-9]{4}'); 

2 ответа

Во-первых, предложение для вас, не используйте VARCHAR2 / CHAR введите для ДАТЫ в базе данных.

Вы можете создать функцию, используя TO_DATE

CREATE OR REPLACE FUNCTION validmmddyyyy (p_str IN VARCHAR2)
   RETURN NUMBER
AS
   V_date   DATE;
BEGIN
   V_Date := TO_DATE (p_str, 'MM/DD/YYYY');
   RETURN 1;
EXCEPTION
   WHEN OTHERS
   THEN
      RETURN 0;
END;

select validmmddyyyy('09/12/2018') from DUAL;
1
select validmmddyyyy('13/12/2018') from DUAL;
0
select validmmddyyyy('2018/12/01') from DUAL;
0

Используйте ваш запрос как,

select birth_date FROM table_name where validmmddyyyy(birth_date) = 0

Если вам повезло использовать Oracle 12c R2, вы можете использовать DEFAULT..ON..CONVERSION ERROR пункт о TO_DATE

SELECT *
  FROM table_name
 WHERE TO_DATE (birth_date default null on conversion error,'MM/DD/YYYY') IS NULL

Вы можете использовать приведенный ниже запрос, чтобы получить другой формат, чем требуется:

выберите * из двойного, где не regexp_like('2013/24/feb','[0-9]{2}.[[:alpha:]]{3}.[0-9]{4}')

Другие вопросы по тегам