[퀴즈] 한글로 된 수를 아라비아숫자로 표기
문제. 한글로 된 수를 숫자로 표기하는 쿼리문을 작성하세요.
WITH t AS
(
SELECT '일백이십조사천오백육십칠억팔천구백일만이천삼백사십오' amt FROM dual
UNION ALL SELECT '이만구천' FROM dual
UNION ALL SELECT '삼만구천팔백사십' FROM dual
)
SELECT * FROM t
;
[결과]
AMT
V
일백이십조사천오백육십칠억팔천구백일만이천삼백사십오
120456789012345
이만구천
29000
삼만구천팔백사십
39840
[정답보기] <== 트리플클릭
SELECT amt
, TO_NUMBER(
NVL(REGEXP_REPLACE(v1, '(.)천|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v1, '(.)백|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v1, '(.)십|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v1, '.[천백십]', ''),'0')
|| NVL(REGEXP_REPLACE(v2, '(.)천|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v2, '(.)백|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v2, '(.)십|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v2, '.[천백십]', ''),'0')
|| NVL(REGEXP_REPLACE(v3, '(.)천|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v3, '(.)백|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v3, '(.)십|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v3, '.[천백십]', ''),'0')
|| NVL(REGEXP_REPLACE(v4, '(.)천|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v4, '(.)백|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v4, '(.)십|.', '\1'),'0')
|| NVL(REGEXP_REPLACE(v4, '.[천백십]', ''),'0')
) v
FROM
(
SELECT amt
, REGEXP_REPLACE(v, '(.+)조|.', '\1') v1
, REGEXP_REPLACE(v, '(.+조)?(.+)억|.', '\2') v2
, REGEXP_REPLACE(v, '(.+[조억])?(.+)만|.', '\2') v3
, REGEXP_REPLACE(v, '.+[조억만]') v4
FROM (SELECT amt, TRANSLATE(amt,'일이삼사오육칠팔구','123456789') v FROM t)
)
;