2012-11-29 3 views
2

Un champ d'ID actuel utilisé dans ma base de données Oracle est un nombre numérique à 10 chiffres. J'ai besoin de 9 caractères au lieu de 10. Je veux envisager de convertir cet identifiant en alphanumérique afin que je puisse mapper les 10 chiffres existants 1-à-1 aux nouvelles valeurs alphanumériques de 9 caractères . Existe-t-il une fonctionnalité existante dans Oracle (ou même en dehors d'Oracle) qui convertit une valeur entièrement numérique en alphanumérique, mais aussi la "rétrécit" de X caractères à X-1 sans avoir de "collisions" de mappage ?Comment puis-je transformer un ensemble de valeurs numériques uniques en un ensemble plus court de valeurs alpha-numériques uniques?

Je devrais également ajouter qu'une fois que je fais cette conversion, je veux aussi pouvoir générer de nouveaux ids qui suivent ce nouveau format. Compte tenu de la quantité de "pièce" que le passage à l'alphanumérique me donnerait, tous les numéros actuels de 10 chiffres entreraient dans l'espace de 5 caractères alphanumériques. Donc, je pense que je prends simplement 0000 devant les 5 caractères alphanumériques. Alors disons que ma valeur d'identifiant mappée "la plus élevée" est "ZZZZ", alors je ferais un plop "0000" à l'avant en le faisant "0000ZZZZZ". L'ID de numéro suivant que je générerais serait "0001ZZZZZ".

+0

Le prochain numéro ID serait mieux d'être A0000000 pour désactiver les collisions entre les anciens et les nouveaux ID (tous les nouveaux Les ID auraient au moins un caractère non numérique à l'intérieur). Il est utile de prendre en compte l'auto-coercition des nombres sur les chaînes dans Oracle (par exemple, Oracle compare un nombre avec une chaîne sans erreur de type-incompatibilité). –

Répondre

0

On dirait que tout ce que je pourrais avoir besoin de faire est encodent base36 mes ID: en.wikipedia.org/wiki/Base_36

3

Le plus simple est de le convertir de décimal en hexadécimal. Tout nombre décimal à 10 chiffres peut être représenté par un nombre hexadécimal à 9 chiffres.