Если гарантируется, что все ACCARDACNT
являются числами, просто используйте
and to_number(a.accardacnt) > 880080200000006 and a.accardacnt < 880080200001000;
Это гарантирует, что числа не будут сравниваться как строки, где '2' > '10'
, потому что просмотр первых символов «2» больше, чем «1».
(В случае десятичных чисел убедитесь, что десятичный разделитель, хранящийся в строках, соответствует текущим настройкам сеанса.)
Если вы хотите предоставить индекс для этого, используйте эту функцию index:
create index idx_accardacnt on mytable( to_number(accardacnt) );
или составной индекс, содержащий to_number(accardacnt)
. Поскольку план выполнения для запроса строк показывает индекс, который будет использоваться, то же самое должно быть верно для числового сравнения и индекса функции. (Помните, что СУБД может свободно использовать предоставленные индексы или нет. Мы просто предлагаем их, но СУБД лучше всего знает, имеет ли смысл использовать их в запросе.)