If I get the question, you want to treat the times separately from dates. That is, 2016-MAY-31 23:00:00 should be treated as just 23:00:00 and 2016-JUN-01 01:00:00 should be treated as just 01:00:00 and treat these two times as a range? So if I was looking at a time of 23:47:43 or 00:23:11, both would be considered within the range but times like 22:56:34 and 01:34:52 would be outside of the range?
To go with a DATE datatype, your range spans two dates so you would need to put dates on the time input value such that a time like 00:23:11 would be looked at as YYYY-MM-DD 00:23:11 and make this date/time fall between your two date/times (START_DATE and END_DATE.)
In your example, 2016-JUN-01 00:23:11 would work but 2016-MAY-31 00:23:11 would not. Similarly for 23:47:23, 2016-MAY-31 23:47:23 would work but 2016-JUN-01 23:47:23 would not.
Basically, the rule could be as follows:
If the time you want to test has an hour < 12 (noon), append the date from the END_DATE, otherwise (hour >= 12) append the date from the START_DATE and compare the result with the date/times in START_DATE and END_DATE.
Perhaps something like this (I'm simulating your start/end dates table with a query here):
WITH test_data AS
(SELECT '00:23:11' as time_char
FROM dual
UNION ALL
SELECT '23:47:23' as time_char
FROM dual
UNION ALL
SELECT '22:56:34' as time_char
FROM dual
UNION ALL
SELECT '01:34:52' as time_char
FROM dual
UNION ALL
SELECT '12:34:52' as time_char
FROM dual
UNION ALL
SELECT '23:00:00' as time_char
FROM dual
UNION ALL
SELECT '01:00:00' as time_char
FROM dual
UNION ALL
SELECT '22:59:59' as time_char
FROM dual
UNION ALL
SELECT '01:0:01' as time_char
FROM dual
)
SELECT test_data.time_char, start_end_table.*
FROM (SELECT TO_DATE('2016-MAY-31 23:00:00', 'YYYY-MON-DD HH24:MI:SS') as start_date
, TO_DATE('2016-JUN-01 01:00:00', 'YYYY-MON-DD HH24:MI:SS') as end_date
FROM dual
) start_end_table
FULL OUTER JOIN
test_data
ON
CASE WHEN TO_NUMBER(SUBSTR(test_data.time_char, 1, 2)) < 12
THEN TO_DATE(TO_CHAR(start_end_table.end_date, 'YYYYMMDD')||test_data.time_char, 'YYYYMMDDHH24:MI:SS')
ELSE TO_DATE(TO_CHAR(start_end_table.start_date, 'YYYYMMDD')||test_data.time_char, 'YYYYMMDDHH24:MI:SS')
END
BETWEEN start_end_table.start_date AND start_end_table.end_date
TIME_CHAR START_DATE END_DATE
00:23:11 2016-MAY-31 23:00:00 2016-JUN-01 01:00:00
23:47:23 2016-MAY-31 23:00:00 2016-JUN-01 01:00:00
23:00:00 2016-MAY-31 23:00:00 2016-JUN-01 01:00:00
01:00:00 2016-MAY-31 23:00:00 2016-JUN-01 01:00:00
01:34:52 (null) (null)
01:0:01 (null) (null)
22:59:59 (null) (null)
22:56:34 (null) (null)
12:34:52 (null) (null)