O Oracle faz a conversão automática de String2number , para valores de coluna String ! No entanto, para as comparações textuais em SQL, a entrada deve ser delimitada explicitamente como uma String: A conversão oposta number2String não é executada automaticamente, não no nível de consulta SQL.
Tive esta dúvida:
select max(acc_num) from ACCOUNTS where acc_num between 1001000 and 1001999;
Aquele apresentou um problema: Error: ORA-01722: invalid number
Acabei de circundar os valores "numéricos" , para torná-los 'Strings' , apenas tornando-os explicitamente delimitados :
select max(acc_num) from ACCOUNTS where acc_num between '1001000' and '1001999';
... e voilà: retorna o resultado esperado.
editar:
E de fato: o col acc_num
em minha tabela é definido como String
. Embora não seja numérico, o invalid number
foi relatado. E a delimitação explícita dos números da string resolveu o problema.
Por outro lado, o Oracle pode tratar Strings como números. Portanto, as operações / funções numéricas podem ser aplicadas nas Strings, e essas consultas funcionam:
selecione max (string_column) em TABLE;
selecione string_column em TABLE onde string_column entre '2' e 'z';
selecione coluna_string em TABLE onde coluna_string > '1';
selecione coluna_string em TABLE onde coluna_string <= 'b';
CUSTOMER
? Você forneceu apenas metade das informações necessárias.