加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

使用SQL仅Base 36到Base 10转换

发布时间:2020-12-12 16:48:19 所属栏目:MsSql教程 来源:网络整理
导读:在SQL语句的上下文中出现了一种情况,在这种情况下,我需要执行一个基础36来转换基数.在Oracle 9或Oracle 10中似乎没有任何内容可以解决这类问题.我的Google-Fu和AskTom建议创建一个pl / sql函数来处理这个任务.这对我来说不是一个选择.我正在寻找有关采取这种
在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)
         )
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读