У меня есть материализованное представление текстового столбца, извлекающего строку чисел, представляющую дату.
Материализованное представление создается с помощью следующей функции:
(regexp_replace(left(substring(lower(replace(content,' ','_')) from 're-inspection_date:_(.*)_'),10),'\D','','g'))
И выводит текстовую строку в формате MMDDYYYY за исключением того, что она не учитывает начальные нули для однозначных месяцев и дней.
Когда я пытаюсь использовать функцию "to_date", указав формат MMDDYYYY, используя следующее:
(to_date(regexp_replace(left(substring(lower(replace(content,' ','_')) from 're-inspection_date:_(.*)_'),10),'\D','','g'),'MMDDYYYY'))
Я получаю сообщение об ошибке «Значение поля даты / времени вне допустимого диапазона: '12122018'».
Я считаю, что проблема возникла по одной или обеим из следующих причин:
Результирующие строки из моего текущего регулярного выражения в материализованном представлении различаются по длине (например, 12212018 8222018 962018) из-за того, что мое регулярное выражение удаляет все нецелочисленные символы. Даты состоят из 6, 7 или 8 цифр.
В результате я еще не смог придумать способ вставить разделитель между значениями месяца / дня / года.
Есть ли способ изменить формат этих выходных строк на формат даты без изменения моего регулярного выражения?
Если нет, как я могу изменить свое регулярное выражение для извлечения этих значений?
Имейте в виду, что дата, которую я ищу в исходном тексте, отформатирована как 01.12.2018 и также не учитывает ведущие 0 в днях или месяцах. Кроме того, в тексте, отформатированном таким же образом, есть еще одна дата, предшествующая целевой дате.
Вот образец исходного текста:
ТЕКСТ МЕСТОПОЛОЖЕНИЯ ОТРЕДАКТИРОВАННЫХ ПЕРСОНАЛОВ BLAH BLAH BLAH **** Loremipsum 28.11.2018 4: 21: 37 PM **** 1 из 2 Номер разрешения на информацию об объекте: 12-34-56789 Название объекта: Dolor sit amet-conctetur Адрес: 123 Fake Street City, почтовый индекс: adipiscing elit12345 РЕЗУЛЬТАТ: sed Do Eiusmod tempor: до 8:00 AM Дата повторной проверки: 12/4/2018 Тип: Blah-Type Stuff Etc: Dolor sit amet-conctetur ...
Где «Дата повторной проверки: 12/4/2018» - это то, что мне нужно.
Я использую Postgres 11.