Oracle робить автоматичне перетворення String2number для значень стовпців String ! Однак для текстових порівнянь у SQL вхід повинен бути чітко визначений як String: Протилежний номер перетворення2String не виконується автоматично, не на рівні запитів 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';
... і voilà: повертає очікуваний результат.
edit:
І справді: col acc_num
у моїй таблиці визначається як String
. Незважаючи на числові показники, invalid number
повідомлялося. І явне розмежування чисел рядків вирішило проблему.
З іншого боку, Oracle може розглядати рядки як числа. Тож числові операції / функції можуть бути застосовані до рядків, і ці запити працюють:
виберіть max (string_column) з TABLE;
виберіть string_column з TABLE, де string_column між '2' і 'z';
виберіть string_column з TABLE, де string_column > '1';
виберіть string_column з TABLE, де string_column <= 'b';
CUSTOMER
? Ви дали лише половину необхідної інформації.