【问题标题】:Converting alphanumeric to numeric and vice versa in oracle在oracle中将字母数字转换为数字,反之亦然
【发布时间】:2020-06-20 18:27:13
【问题描述】:

我需要将字母数字转换为数字,反之亦然。

示例:如果传递了'A2',那么我在下面编写了查询以将其转换为数字:

select sum(val) from (
  select power(36, loc - 1) *
  case when letter between '0'
  and '9'
  then to_number(letter)
  else 10 + ascii(letter) - ascii('A')
  end as val from(
    select substr(ip_str, length(ip_str) + 1 - level, 1) letter,
    level loc from(select 'A2'
      ip_str from dual) connect by level <= length(ip_str)
  )
); --sum(val) returns 362

如何将362 解码回'A2'

【问题讨论】:

标签: sql oracle alphanumeric


【解决方案1】:

Base N Convert - 该站点描述算法。我将其实现为递归查询:

with 
  t(num) as (select 362 from dual),
  r(md, div, lvl) as (
    select mod(num, 36), floor(num/36), 1 from t union all
    select mod(div, 36), floor(div/36), lvl + 1 from r where div > 0)
select listagg(case when md > 9 then chr(ascii('A') - 10 + md) 
                    else to_char(md) 
               end) within group (order by lvl desc) b36
  from r

dbfiddle demo

似乎可行,我测试了几个值与在线计算器比较结果。理论上你可以使用其他的base,不只是36,算法是一样的,但是我没有测试过。

【讨论】:

  • 谢谢你的帮助。
猜你喜欢
  • 2011-12-01
  • 2022-01-07
  • 2011-05-27
  • 2021-11-23
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多