Как извлечь дату из строки в sql oracle 9i

У меня есть объяснение столбца (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

Вам нужно извлечь часть Объяснение, которая содержит строку даты, например, из значения Shipment of cabbage by agreement 29.04.2019 TAX Free вам нужно извлечь 29.04.2019 и отправить эту строку в функцию to_date(). Знаете ли вы, как извлечь соответствующую часть значения столбца? Также из этого значения: Tax payment for the may 2019 вы должны извлечь may 2019?

Abra 28.05.2019 08:56

Довольно странное требование. Как быть с сообщениями типа «Уплата налога за текущий год»?

Wernfried Domscheit 28.05.2019 08:56

«Знаете ли вы, как извлечь соответствующую часть значения столбца?» Здесь я сталкиваюсь с проблемой. Это может быть везде в поле. "А как быть с сообщениями типа "Уплата налога за текущий год"?" Я знаю, чем это может быть: «ДД.ММ.ГГГГ», «ДД.ММ.ГГ» и «буквальный месяц ГГГГ». Это могут быть и другие странные варианты, но я перечислил 80% полей.

Rasinger 28.05.2019 09:03

@Rasinger есть ли не более одной информации о дате в каждой строке для столбца объяснения?

Barbaros Özhan 28.05.2019 10:26

Может содержать более одной даты.

Rasinger 28.05.2019 10:34
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью регулярного выражения. Попробуйте ниже код:

  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 нет регулярных выражений (

Rasinger 28.05.2019 12:13

Поэтому я нашел способ использовать (regexp_instr) как функцию — oracleappstech-vinoth.blogspot.com/2012/03/…. Теперь это работает.

Rasinger 29.05.2019 12:27

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