Ну, вы можете сделать прямой подход и использовать регулярное выражение, как в примере, который вы нашли:
SELECT
REGEXP_SUBSTR('Chicago, IL, April 20, 2015 - etc etc', '(January|February|March|April|May|June|July|August|September|October|November|December) [0-9]{1,2}, [0-9]{4}')
FROM dual;
Но это будет работать только в том случае, если все даты указаны в том же формате. Полное название месяца с первой буквой в верхнем регистре, пробел, день, запятая, пробел, 4-значный год. Если может быть больше одного пространства или вообще нет места, используйте \s*
вместо пробелов в регулярном выражении. Если имя месяца не обязательно initcap, используйте initcap()
для флага источника или без учета регистра для функции regexp_substr
.
Кроме того, это поймает фиктивные даты, которые соответствуют формату, например «Апрель 99, 1234», вам придется отфильтровывать их позже.
будет дата всегда имеет тот же формат, например, 'full_month_name день, год'? – Timekiller
Да, это правильно. – user747291