Oracle выполняет автоматическое преобразование String2number для значений столбца String ! Однако для текстовых сравнений в SQL входные данные должны быть явно разделены как String: обратное преобразование number2String не выполняется автоматически, ни на уровне SQL-запроса.
У меня был такой запрос:
select max(acc_num) from ACCOUNTS where acc_num between 1001000 and 1001999;
Это представляло проблему: Error: ORA-01722: invalid number
Я просто обвел "числовые" значения, чтобы сделать их "строками" , просто сделав их явно ограниченными :
select max(acc_num) from ACCOUNTS where acc_num between '1001000' and '1001999';
... и вуаля: он возвращает ожидаемый результат.
edit:
И действительно: столбец acc_num
в моей таблице определяется как String
. invalid number
Сообщалось, хотя и не числовым . И явное разделение числовых строк решило проблему.
С другой стороны, Oracle может рассматривать строки как числа. Таким образом, числовые операции / функции могут применяться к строкам, и эти запросы работают:
выберите max (string_column) из ТАБЛИЦЫ;
выберите string_column из ТАБЛИЦЫ, где string_column между '2' и 'z';
выберите string_column из ТАБЛИЦЫ, где string_column > '1';
выберите string_column из ТАБЛИЦЫ, где string_column <= 'b';
CUSTOMER
? Вы предоставили только половину необходимой информации.