Oracle realiza una conversión automática de String2number , para valores de columna de cadena . Sin embargo, para las comparaciones textuales en SQL, la entrada debe estar delimitada como una Cadena explícitamente: La conversión opuesta number2String no se realiza automáticamente, no en el nivel de consulta SQL.
Tuve esta consulta:
select max(acc_num) from ACCOUNTS where acc_num between 1001000 and 1001999;
Ese presentaba un problema: Error: ORA-01722: invalid number
Acabo de rodear los valores "numéricos" , para convertirlos en 'Cadenas' , simplemente haciéndolos delimitados explícitamente :
select max(acc_num) from ACCOUNTS where acc_num between '1001000' and '1001999';
... y voilà: Devuelve el resultado esperado.
editar:
Y de hecho: la columna acc_num
en mi tabla se define como String
. Aunque no es numérico, invalid number
se informó. Y la delimitación explícita de los números de cadena resolvió el problema.
Por otro lado, Oracle puede tratar las cadenas como números. Entonces, las operaciones / funciones numéricas se pueden aplicar en las cadenas, y estas consultas funcionan:
seleccione max (string_column) de TABLE;
seleccione string_column de TABLE donde string_column entre '2' y 'z';
seleccione string_column de TABLE donde string_column > '1';
seleccione string_column de TABLE donde string_column <= 'b';
CUSTOMER
? Solo ha proporcionado la mitad de la información necesaria.