J'utilise Oracle SQL et je veux savoir comment les 2 requêtes ci-dessous retournent exactement la même chose parfois et d'autres fois un résultat différent.SQL: using substr avec to_char
select substr(to_char(min_code + 10, '099'),1,3)
from x
where a = b;
select substr(min_code + 10,1,2)
from x
where a = b;
La 1ère requête a la longueur de substr fixé à 3, alors que la 2ème requête a la longueur de substr mis à 2. Toutefois, lorsque min_code est égal à 151 deux requêtes renverront 16. Comment est-ce possible? Je réalise qu'il doit s'agir de la façon dont substr calcule la longueur lors de l'utilisation de to_char mais je crois comprendre que le 2ème argument (1 dans ces cas) est où la sous-chaîne doit commencer et le 3ème argument est le longueur de la sous-chaîne. Pourtant, la première requête renvoie toujours 16 au lieu de 161 comme je l'aurais imaginé. Ensuite, quand je le testerai avec un enregistrement où min_code sera égal à 051, la 1ère requête retournera 06, alors que la 2ème requête retournera 61. Je comprends comment la 2ème requête obtient 61 car elle doit laisser tomber le 0 initial lors de l'exécution l'opération arithmétique MAIS comment diable la première requête (avec la fonction to_char) renvoie 06. Je m'attendrais à 061 comme longueur est 3.
Essayez 'select '|' || to_char (151, '099') || '|' de dual', puis éditez le masque de format dans ''FM099''; cela devrait vous aider à trouver le problème – Aleksej