Oracle effectue une conversion automatique String2number , pour les valeurs de colonne String ! Cependant, pour les comparaisons textuelles en SQL, l'entrée doit être délimitée comme une chaîne de manière explicite: La conversion opposée number2String n'est pas effectuée automatiquement, pas au niveau de la requête SQL.
J'ai eu cette requête:
select max(acc_num) from ACCOUNTS where acc_num between 1001000 and 1001999;
Celui-là posait un problème: Error: ORA-01722: invalid number
Je viens d'entourer les valeurs "numériques" , pour en faire des 'chaînes' , en les délimitant simplement :
select max(acc_num) from ACCOUNTS where acc_num between '1001000' and '1001999';
... et voilà: il renvoie le résultat attendu.
edit:
Et en effet: le col acc_num
dans ma table est défini comme String
. Bien que non numérique, le a invalid number
été signalé. Et la délimitation explicite des numéros de chaîne a résolu le problème.
D'autre part, Oracle peut traiter les chaînes comme des nombres. Ainsi, les opérations / fonctions numériques peuvent être appliquées sur les chaînes, et ces requêtes fonctionnent:
sélectionnez max (string_column) dans TABLE;
sélectionnez string_column dans TABLE où string_column entre '2' et 'z';
sélectionnez string_column dans TABLE où string_column > '1';
sélectionnez string_column dans TABLE où string_column <= 'b';
CUSTOMER
? Vous n'avez donné que la moitié des informations nécessaires.