Вы можете использовать регулярное выражение для извлечения времени открытия и закрытия, а затем манипулировать ими по мере необходимости:
SELECT s.*,
TRIM(REGEXP_SUBSTR(s.weekend_hours, '[0-9]+:*[0-9]* *(am|pm)*', 1, 1)) AS OPENING_HOUR_STRING,
TRIM(REGEXP_SUBSTR(s.weekend_hours, '[0-9]+:*[0-9]* *(am|pm)*', 1, 2)) AS CLOSING_HOUR_STRING
FROM STORE s
Как только у вас есть базовая информация выше, вы можете манипулировать ею, чтобы получить открытие ивремя закрытия в качестве даты, затем используйте MAX в соответствующем поле:
WITH cteSTORE_STRING_VALUES AS
(SELECT s.*,
TRIM(REGEXP_SUBSTR(s.weekend_hours, '[0-9]+:*[0-9]* *(am|pm)*', 1, 1)) AS OPENING_HOUR_STRING,
TRIM(REGEXP_SUBSTR(s.weekend_hours, '[0-9]+:*[0-9]* *(am|pm)*', 1, 2)) AS CLOSING_HOUR_STRING
FROM STORE s),
cteALL_STORE_VALUES AS
(SELECT s.*,
CASE
WHEN LENGTH(OPENING_HOUR_STRING) < 4 THEN LPAD(OPENING_HOUR_STRING, 4, '0')
ELSE OPENING_HOUR_STRING
END AS PADDED_OPENING_STRING,
CASE
WHEN LENGTH(CLOSING_HOUR_STRING) < 4 THEN LPAD(CLOSING_HOUR_STRING, 4, '0')
ELSE CLOSING_HOUR_STRING
END AS PADDED_CLOSING_STRING
FROM cteSTORE_STRING_VALUES s),
cteSTORES_WITH_HOURS AS
(SELECT a.*,
CASE
WHEN UPPER(SUBSTR(a.OPENING_HOUR_STRING, -3)) IN (' AM', ' PM') THEN
TO_DATE(a.OPENING_HOUR_STRING, 'HH:MI AM')
WHEN UPPER(SUBSTR(a.OPENING_HOUR_STRING, -2)) IN ('AM', 'PM') THEN
TO_DATE(a.OPENING_HOUR_STRING, 'HH:MIAM')
WHEN INSTR(a.OPENING_HOUR_STRING, ':') > 0 THEN
TO_DATE(a.OPENING_HOUR_STRING, 'HH24:MI')
ELSE
TO_DATE(a.PADDED_OPENING_STRING, 'HH24MI')
END AS OPENING_HOURS,
CASE
WHEN UPPER(SUBSTR(a.CLOSING_HOUR_STRING, -3)) IN (' AM', ' PM') THEN
TO_DATE(a.CLOSING_HOUR_STRING, 'HH:MI AM')
WHEN UPPER(SUBSTR(a.CLOSING_HOUR_STRING, -2)) IN ('AM', 'PM') THEN
TO_DATE(a.CLOSING_HOUR_STRING, 'HH:MIAM')
WHEN INSTR(a.CLOSING_HOUR_STRING, ':') > 0 THEN
TO_DATE(a.CLOSING_HOUR_STRING, 'HH24:MI')
ELSE
TO_DATE(a.PADDED_CLOSING_STRING, 'HH24MI')
END AS CLOSING_HOURS
FROM cteALL_STORE_VALUES a)
SELECT *
FROM cteSTORES_WITH_HOURS
WHERE OPENING_HOURS = (SELECT MAX(OPENING_HOURS)
FROM cteSTORES_WITH_HOURS);
SQLFiddle здесь
Удачи.