1001 * данный *
+----+----------+
| id | ts |
+----+----------+
| 1 | 09:00 AM |
| 2 | 10:00 AM |
| 3 | 11:00 PM |
| 4 | 09:00 PM |
| 5 | 09:00 |
| 6 | 22:00 |
+----+----------+
тогда
select id,ts
from t
where case when instr(upper(ts),'AM') > 0 then
cast(trim(replace(ts,'AM','')) as time)
when instr(upper(ts),'PM') > 0 then
case when cast(substring_index(ts,':',1) as integer) < 12 then
addtime(cast(trim(replace(ts,'PM','')) as time),'12:00:00')
else
cast(trim(replace(ts,'PM','')) as time)
end
else
cast(trim(ts) as time)
end > cast('10:00' as time);
производит
+----+----------+
| id | ts |
+----+----------+
| 3 | 11:00 PM |
| 4 | 09:00 PM |
| 6 | 22:00 |
+----+----------+
Здесь нет ничего сложного, и код пытается перехитрить то, что кажется довольно случайным способом хранения времени.