Возможно, в столбце номеров сотрудников имеются данные, которые невозможно преобразовать в число.
Предполагая, что номер сотрудника является целочисленным значением, следующий запрос покажет вам ошибочные строки:
select * from sys.employee_infor where regexp_like(emp_number, '[^0-9]');
Вы можете использовать предложение where в своем запросе, чтобы игнорировать плохо отформатированные данные:
select * from (
select * from sys.employee_infor where not regexp_like(emp_number, '[^0-9]')
) where to_number(emp_number) between 1200 and 2400
PS: вы хотите сравнивать числа, а не строки.
Другое решение заключается в использовании опции DEFAULT ... ON CONVERSION ERROR
функции TO_NUMBER()
, которая доступна начиная с Oracle 12c R2. С этой опцией ошибки преобразования перехватываются, и вместо выдачи ошибки возвращается значение по умолчанию:
select *
from sys.employee_infor
where to_number(emp_number default 0 on conversion error) between 1200 and 2400