2015-12-15 4 views
0

Как вы запрашиваете varchar2 для формата? Например, поле Varchar2 содержит дату в виде mm/dd/yyyy '01/01/2015 '. Как мне найти дату, которая была написана как yyyy/mm/dd '2015/01/01', поскольку я не знаю неверно отформатированную дату, поэтому я не могу ее обычным образом искать. Я просто хочу написать where FIELD_1 like '####/##/##', но это явно не работает.Поиск varchar2 для формата?

ответ

3

Конечно то, что вы хотите делать работы, если использовать регулярные выражения:

where regexp_like(field_1, '^[0-9]{4}/[0-9]{2}/[0-9]{2}$') 

В качестве примечания: вы не должны хранить даты в базе данных в виде строк. Вместо этого вы должны использовать даты.

+0

Поверьте мне, я знаю лучше, а не мой DB. Это на самом деле поставщик данных ... Это сумасшедший мир! –

1

Ответ Гордона, вероятно, достаточно хорош для того, что вам нужно, но это может быть проблема, которую регулярное выражение, которое он дал вам, будет соответствовать вещам вроде 9999/99/99, которые не являются датами.

Если вам действительно нужно соответствовать датам - и если дата - это все значение VARCHAR2, а не только что-то встроенное в нее, то функция может помочь.

В приведенном ниже примере я создаю функцию с именем safe_to_date, которая возвращает NULL, если данное значение VARCHAR2 не является датой в указанном формате.

CREATE OR REPLACE FUNCTION safe_to_date (p_string VARCHAR2) RETURN DATE IS 
BEGIN 
    RETURN to_date(p_string,'YYYY/MM/DD'); 
EXCEPTION 
    WHEN others THEN 
    RETURN NULL; 
END; 


with my_table AS 
(SELECT '9999/99/99' /*invalid*/ my_column FROM dual UNION ALL 
    SELECT '2015/12/25' from dual UNION ALL 
    SELECT 'not a date at all' /*invalid*/ FROM dual UNION ALL 
    SELECT '11-NOV-1917' from dual UNION ALL 
    SELECT '2015*DEC*25' from dual UNION ALL 
    SELECT '2015/02/28' from dual UNION ALL 
    SELECT '2015/02/29' /*invalid*/ from dual) 
SELECT * 
FROM my_table 
WHERE safe_to_date(my_column) IS NOT NULL; 

Ожидаемые результаты:

25-DEC-2015 
11-NOV-1917 
25-DEC-2015 
28-FEB-2015 
Смежные вопросы