2017-08-08 1 views
0

J'essaye d'exécuter une jointure entre deux tables dans Oracle où la colonne dans l'une des tables est une chaîne et un nombre dans l'autre.Oracle Trim RegEx

Je dois effectuer une sorte de fonction de coupe la version de chaîne car c'est un champ de 8 caractères et conduira avec 0 s dans les cas où le nombre est inférieur à 8 chiffres. Par exemple 123 = '00000123'. Comment puis-je obtenir la chaîne '00000123' pour égaler '123' indépendamment du nombre de 0 s principaux.

Merci!

+1

Vous pouvez regarder les données et le plan d'exécution pour voir s'il vaut mieux convertir la chaîne en nombre, ou le nombre de une chaîne à remplissage nul, pour minimiser la surcharge et utiliser au mieux les index, etc., lors de la comparaison des valeurs de colonnes. Avec beaucoup de données ou une requête que vous exécuterez beaucoup, il peut être utile d'ajouter une colonne virtuelle indexée ou un index basé sur une fonction à l'une des tables. –

Répondre

1

Utilisez la fonction de conversion to_number:

SELECT to_number('00000123') 
FROM dual; 

| TO_NUMBER('00000123') | 
|-----------------------| 
|     123 | 

Démo: http://sqlfiddle.com/#!4/1792d/18

+0

Wow. C'est simple, hein ?! Merci! – am340