Я не уверен, что ваше использование «МЕЖДУ» - это то, что вы намерены. Меня беспокоит, что «между» является «включительно» обоих указанных значений. Обычно при фильтрации дат вам нужен открытый интервал, который не включает по крайней мере одну из границ.
В вашем вопросе, например, между вами будет получен/пропустить 06:00 и 23:00 минут. Это показано ниже, чтобы проиллюстрировать мою мысль.
Используя приведенный ниже раздел «Настройка тестовых данных», я создаю набор данных теста в кромке.
Вот вывод двух запросов:
Query для МЕЖДУ 06 и 23
select
m.mopstart
from
mopactivity m
where 1=1
and to_char(m.mopstart, 'HH24:MI') between '06:00' and '23:00'
order by
m.mopstart
;
10-SEP-02 06.00.00.000000000 AM
10-SEP-02 06.01.00.000000000 AM
10-SEP-02 10.59.00.000000000 PM
10-SEP-02 11.00.00.000000000 PM <-- Did you really want 23:00 record here?
Query для NOT BETWEEN 06 и 23
select
m.mopstart
from
mopactivity m
where 1=1
and to_char(m.mopstart, 'HH24:MI') NOT between '06:00' and '23:00'
order by
m.mopstart
;
10-SEP-02 12.00.00.000000000 AM
10-SEP-02 05.59.00.000000000 AM
10-SEP-02 11.01.00.000000000 PM
Установка для Данные испытаний ::
drop table mopactivity
;
create table mopactivity
(
mopstart timestamp NOT NULL
)
;
insert into mopactivity
values(
TO_TIMESTAMP ('10-Sep-02 22:59', 'DD-Mon-RR HH24:MI')
)
;
insert into mopactivity
values(
TO_TIMESTAMP ('10-Sep-02 23:00', 'DD-Mon-RR HH24:MI')
)
;
insert into mopactivity
values(
TO_TIMESTAMP ('10-Sep-02 23:01', 'DD-Mon-RR HH24:MI')
)
;
insert into mopactivity
values(
TO_TIMESTAMP ('10-Sep-02 05:59', 'DD-Mon-RR HH24:MI')
)
;
insert into mopactivity
values(
TO_TIMESTAMP ('10-Sep-02 06:00', 'DD-Mon-RR HH24:MI')
)
;
insert into mopactivity
values(
TO_TIMESTAMP ('10-Sep-02 06:01', 'DD-Mon-RR HH24:MI')
)
;
insert into mopactivity
values(
TO_TIMESTAMP ('10-Sep-02 00:00', 'DD-Mon-RR HH24:MI')
)
;
commit
;
должен быть ГДЕ TO_CHAR (MOPACTIVITY.MOPSTART, 'hh24: mi') НЕ МЕЖДУ '06: 00 'И '23: 00' – Satya
Является ли поведение МЕЖДУ X И Y документированным, где X больше Y? Если это так, я подозреваю, что это не то, чего вы ожидаете. –
Предположительно 'NOT BETWEEN '23: 00 'AND '06: 00'' означает то же самое, что' NOT BETWEEN '06: 00' AND '23: 00'', что является полной противоположностью тому, что вы хотите. Я предлагаю сбросить 'NOT' и использовать порядок, который имеет смысл:' BETWEEN '06: 00 'AND '23: 00''. – ruakh