Вам не нужно конвертировать данные таблицы; это не только потребует больше усилий, но и остановит использование любого индекса в этом столбце.
Oracle будет учитывать часовые пояса при сравнении значений, поэтому сравните исходные данные таблицы с конкретным днем - и преобразуйте их в метку времени с часовым поясом:
select *
from MY_TABLE
where MY_TIMESTAMP >= timestamp '2019-03-19 00:00:00 Europe/London'
and MY_TIMESTAMP < timestamp '2019-03-20 00:00:00 Europe/London'
или если вы хотите основать его на сегодняшнем дне, а не на фиксированной дате:
where MY_TIMESTAMP >= from_tz(cast(trunc(sysdate) as timestamp), 'Europe/London')
and MY_TIMESTAMP < from_tz(cast(trunc(sysdate) + 1 as timestamp), 'Europe/London')
или если вам передаются даты в виде значений ГГГГДДД (замените фиксированное значение на числовое имя аргумента):
where MY_TIMESTAMP >= from_tz(to_timestamp(to_char(2019078), 'RRRRDDD'), 'Europe/London')
and MY_TIMESTAMP < from_tz(to_timestamp(to_char(2019079), 'RRRRDDD'), 'Europe/London')
Быстрая демонстрация с некоторыми примерами данных в CTE для простоты в двух зонах:
with my_table (id, my_timestamp) as (
select 1, timestamp '2019-03-19 00:37:56.030000000 Europe/Paris' from dual
union all
select 2, timestamp '2019-03-19 00:37:56.030000000 Europe/London' from dual
union all
select 3, timestamp '2019-03-19 01:00:00.000000000 Europe/Paris' from dual
union all
select 4, timestamp '2019-03-20 00:37:56.030000000 Europe/Paris' from dual
union all
select 5, timestamp '2019-03-20 00:37:56.030000000 Europe/London' from dual
)
select *
from MY_TABLE
where MY_TIMESTAMP >= timestamp '2019-03-19 00:00:00 Europe/London'
and MY_TIMESTAMP < timestamp '2019-03-20 00:00:00 Europe/London'
/
ID MY_TIMESTAMP
---------- --------------------------------------------------
2 2019-03-19 00:37:56.030000000 EUROPE/LONDON
3 2019-03-19 01:00:00.000000000 EUROPE/PARIS
4 2019-03-20 00:37:56.030000000 EUROPE/PARIS
Первая строка выборки исключена, потому что 00:37 в Париже - все еще предыдущий день в Лондоне. Второй и третий включены, потому что они оба находятся в ранние часы этого дня - третий ряд просто закрадывается. Четвертый ряд включен по той же причине, по которой был исключен первый - 00:37 завтра все еще сегодня из Лондона. И пятый исключен, потому что в Лондоне после полуночи.