WITH T(RM, QT, LV) AS ( SELECT MOD(:V,26) RM, FLOOR(:V/26) QT, 1 LV FROM DUAL UNION ALL SELECT MOD(QT,26), FLOOR(QT/26), LV + 1 FROM T WHERE LV < 6 ) SELECT LISTAGG(CHR(RM+65)) WITHIN GROUP(ORDER BY LV) VAL FROM T
진수 변환 방법을 완전히 잊었네요. 산수를 못해서 그런지 마농님 쿼리는 다시 봐도 잘 이해가..;
ORA-00923 은 FROM 이 나올 자리에 다른 게 나왔다는 걸로 봐서 SELECT 절을 잘못 적으신듯..
LISTAGG 는 11G부터 사용 가능합니다.
http://www.gurubee.net/article/55512
SELECT id , v , CHR(FLOOR(MOD(v, POWER(26, 1)) / POWER(26, 0)) + 65) || CHR(FLOOR(MOD(v, POWER(26, 2)) / POWER(26, 1)) + 65) || CHR(FLOOR(MOD(v, POWER(26, 3)) / POWER(26, 2)) + 65) || CHR(FLOOR(MOD(v, POWER(26, 4)) / POWER(26, 3)) + 65) || CHR(FLOOR(MOD(v, POWER(26, 5)) / POWER(26, 4)) + 65) || CHR(FLOOR(MOD(v, POWER(26, 6)) / POWER(26, 5)) + 65) AS x FROM (SELECT 1 id, 13525237 v FROM dual) ;