SQL: последнее вхождение формата
У меня есть (оракул) текстовое поле, как показано ниже. Это сводная информация о регистрации заявки, которая включает в себя соответствующий код пользователя, дату и время, за которыми следуют некоторые комментарии. Как видите, у меня есть даты в этом поле, но в виде строки. Я хотел бы вытащить последнее вхождение формата даты, в данном случае "2015-09-07". Или даже лучше, если я смогу вытащить дату, когда комментарий будет "Билет фиксирован" или "Билет закрыт".
{ABC, 2015-08-31 10:27}: Ticket Issued 151553
{ANN, 2015-09-07 13:34}: Assigned to user 'FAR'
{MJJ, 2015-09-07 13:37}: Comments added
{MFR, 2015-09-07 13:37}: Ticket fixed
Я пытался использовать SUBSTR, но это не сработает, поскольку содержание / длина последнего комментария могут измениться.
Использование базы данных Oracle.
1 ответ
Настройка схемы Oracle 11g R2:
CREATE TABLE tickets( details ) AS
SELECT '{ABC, 2015-08-31 10:27}: Ticket Issued 151553' FROM DUAL UNION ALL
SELECT '{ANN, 2015-09-07 13:34}: Assigned to user ''FAR''' FROM DUAL UNION ALL
SELECT '{MJJ, 2015-09-07 13:37}: Comments added' FROM DUAL UNION ALL
SELECT '{MFR, 2015-09-07 13:37}: Ticket fixed' FROM DUAL;
Запрос 1:
SELECT *
FROM (
SELECT SUBSTR( details, 2,3 ) AS id,
TO_DATE( SUBSTR( details, 7,16 ), 'YYYY-MM-DD HH24:MI' ) AS time,
SUBSTR( details, 26 ) AS ticket_comment
FROM tickets
)
WHERE ticket_comment IN ( 'Ticket fixed', 'Ticket Closed' )
| ID | TIME | TICKET_COMMENT |
|-----|----------------------|----------------|
| MFR | 2015-09-07T13:37:00Z | Ticket fixed |