I have a string which contains only numbers. I need to replace all digits in the string with a corresponding alphabet as below,
0 -> A
1 -> B
2 -> C
..
9 -> J
I tried with below using translate and replace functions and it works fine for me,
Forward :
WITH T (ID) AS (SELECT '10005614827' FROM DUAL)
SELECT ID, TRANSLATE(ID,'0123456789','ABCDEFGHIJ') "TRANSLATE",
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(ID,'0','A'),'1','B'),'2','C'),'3','D'),'4','E'),'5','F'),'6','G'),'7','H'),'8','I'),'9','J') "REPLACE"
FROM T;
Output:
ID TRANSLATE REPLACE
10005614827 BAAAFGBEICH BAAAFGBEICH
Reverse:
WITH T (ID) AS (SELECT 'BAAAFGBEICH' FROM DUAL)
SELECT ID, TRANSLATE(ID,'ABCDEFGHIJ','0123456789') "TRANSLATE",
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(ID,'A','0'),'B','1'),'C','2'),'D','3'),'E','4'),'F','5'),'G','6'),'H','7'),'I','8'),'J','9') "REPLACE"
FROM T;
Output:
ID TRANSLATE REPLACE
BAAAFGBEICH 10005614827 10005614827
Is there any way to use regular expression to implement this?
WITH T (ID) AS (SELECT '10005614827' FROM DUAL)
SELECT ID, REGEXP_REPLACE(ID,'[0-9]','[A-J]')
FROM T;