У меня есть объяснение столбца (VARCHAR2) в таблице:
No| Explanation
1 | Shipment of cabbage by agreement 29.04.2019 TAX Free
2 | Payment for screws (01.04.19) Tax: 13.55 %
3 | For reserch by deal dated 01.01.2015 Tax free
4 | Tax payment for the may 2019
Мне нужен запрос, который ответит: «Есть ли в записи дата в какой-либо форме?» Да/Нет для каждой записи. Возможно ли это на Oracle 9i?
Я пробовал некоторые решения. Но столкнулся с проблемой:
"ORA-01858: a non-numeric character was found where a numeric was expected".
Теперь я не совсем понимаю, где в поле будет метка даты.
select to_char(to_date(EXPLANATION, 'DD.MM.YYYY')) from PAYMENTDOC
Довольно странное требование. Как быть с сообщениями типа «Уплата налога за текущий год»?
«Знаете ли вы, как извлечь соответствующую часть значения столбца?» Здесь я сталкиваюсь с проблемой. Это может быть везде в поле. "А как быть с сообщениями типа "Уплата налога за текущий год"?" Я знаю, чем это может быть: «ДД.ММ.ГГГГ», «ДД.ММ.ГГ» и «буквальный месяц ГГГГ». Это могут быть и другие странные варианты, но я перечислил 80% полей.
@Rasinger есть ли не более одной информации о дате в каждой строке для столбца объяснения?
Может содержать более одной даты.
Вы можете сделать это с помощью регулярного выражения. Попробуйте ниже код:
select No, Explanation,
case when regexp_instr(Explanation,'\d{2}.\d{2}.\d{2}')!=1 then
'Y'
when regexp_instr(Explanation,'\d{2}.\d{2}.\d{4}')!=1 then
'Y'
when REGEXP_instr(Explanation, '(January|February|March|April|May|June|July|August|September|October|November|December) [0-9]{4}')!=1 then
'Y'
END Does_entry_have_a_date_in_some_form_in_it
from table_name;
Выход :
No| Explanation | Does_entry_have_a_date_in_some_form_in_it
1 | Shipment of cabbage by agreement 29.04.2019 TAX Free | Y
2 | Payment for screws (01.04.19) Tax: 13.55 % | Y
3 | For reserch by deal dated 01.01.2015 Tax free | Y
4 | Tax payment for the may 2019 | Y
К сожалению, в Oracle 9i нет регулярных выражений (
Поэтому я нашел способ использовать (regexp_instr) как функцию — oracleappstech-vinoth.blogspot.com/2012/03/…. Теперь это работает.
Вам нужно извлечь часть Объяснение, которая содержит строку даты, например, из значения
Shipment of cabbage by agreement 29.04.2019 TAX Free
вам нужно извлечь29.04.2019
и отправить эту строку в функциюto_date()
. Знаете ли вы, как извлечь соответствующую часть значения столбца? Также из этого значения:Tax payment for the may 2019
вы должны извлечьmay 2019
?