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 ответ

SQL Fiddle

Настройка схемы 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 |
Другие вопросы по тегам