在sql语句的上下文中出现了一种情况,在这种情况下,我需要执行一个基础36来转换基数.在Oracle 9或Oracle 10中似乎没有任何内容可以解决这类问题.我的Google-Fu和AskTom建议创建一个pl / sql函数来处理这个任务.这对我来说不是一个选择.我正在寻找有关采取这种方法的建议可能有助于我解决这个问题.
把它变成视觉形式…
WITH Base36Values AS ( SELECT '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' myBase36 FROM DUAL ),TestValues AS ( SELECT '01Z' BASE36_VALUE,71 BASE10_VALUE FROM DUAL ) SELECT * FROM Base36Values,TestValues
我正在寻找一些计算值71,基于输入01Z.
编辑 – 这是向后…给定01Z将其翻译为71.
作为贿赂,每个有用的答案得到一个免费的upvote.
谢谢
邪恶.
解决方法
select sum(position_value) from ( select power(36,position-1) * case when digit between '0' and '9' then to_number(digit) else 10 + ascii(digit) - ascii('A') end as position_value from ( select substr(input_string,length(input_string)+1-level,1) digit,level position from (select '01Z' input_string from dual) connect by level <= length(input_string) ) )