У меня есть поле Comments (Clob), которое представляет собой набор времени, когда был сделан комментарий, сделанный комментарий и сам комментарий.
Мне нужно извлечь «Дата», «Комментарий» из поля.
Используя регулярные выражения, я смог извлечь поля даты и поле comment_by, но дата в символе.
Я не могу преобразовать это поле в Date.
Пример комментариев:
7/18/2018 10:36:29 AM, beginj requesting cancellation as steps are no longer viable.
5/16/2018 8:28:04 AM, josephav Not applicable for GSC
Я могу получить «дату», используя это регулярное выражение (RE):
regexp_substr((dbms_lob.substr(requestcommentsdisplay,50,1)),'[^ ]+',1)
Я могу получить имя Comment_by, используя это регулярное выражение (RE)
regexp_substr((dbms_lob.substr(requestcommentsdisplay,50,1)),'[a-z]+',1)
Таким образом, даты после извлечения с использованием RE выглядят следующим образом:
10/5/2017
4/2/2012
12/31/2015
3/16/2014
Мне нужно преобразовать их в правильные даты, чтобы я мог использовать их в своем коде.
Любая помощь приветствуется :)
Спасибо
ORA-01843: неверный месяц


Использовать
SELECT
CASE WHEN (length(<regex_string>).
<9)
Then
TO_DATE('0'||<regex_string>,'MM/DD/YYYY')
but oracle parses it with single digit as well though you can try to debug and print dates for single digit via this
condition.
ELSE
TO_DATE(<regex_string>,'MM/DD/YYYY')
END CASE FROM TABLE;
для преобразования строки в формат даты, поскольку o/p, который вы получили от regex_substr, является строкой.
Это позволит вам прочитать ввод в формате, который вы получаете, и преобразовать в фактический формат даты оракулов.
Спасибо, Химаншу, но я получаю следующую ошибку: ORA-01843: неверный месяц.
затем проверьте годовые данные, которые у вас есть в месяц в виде одной цифры в большинстве мест, поэтому используйте оператор case, чтобы присоединиться к дополнительному M как значение 0 с оператором CASE
Вы можете установить параметр nls_territory в зависимости от вашей страны перед вызовом запроса
alter session set nls_territory = 'AMERICA';--alternatively convert to 'TURKEY' as an example
а затем попробуйте следующее
with tab(date_chr) as
(
select '10/5/2017' from dual union all
select '4/2/2012' from dual union all
select '12/31/2015' from dual union all
select '3/16/2014' from dual
)
select to_date(date_chr,'MM/DD/YYYY')
from tab;
Вы можете использовать
TO_DATE