Oracle将任何字符串更改为数字

时间:2017-07-16 08:59:37

标签: oracle

我遇到这个问题我们有这个数据库女巫IDS存储在varchar2类型中这个ID包含字母。

是否有任何解决方案可以将字符串转换为数字,无论该字符串是什么值。

例如,有SELCT ASCII('t') FROM DUAL; result : 116.

ASCII只接受一个CHAR希望您明白这一点。对不起我的英文

2 个答案:

答案 0 :(得分:1)

使用oracle translate方法用数字替换A-Z或a-z字符。 然后使用to_number从中获取数字。

select translate('A1B2C3', 'ABC', '456') from dual;    --result '415263'

select to_number(translate('A1B2C3', 'ABC', '456')) from dual;  --result 415263

translate function documentation

  

Oracle / PLSQL TRANSLATE函数用另一组字符替换字符串中的字符序列。但是,它一次替换一个字符。   例如,它将使用replacement_string中的第一个字符替换string_to_replace中的第一个字符。然后它将用replacement_string中的第二个字符替换string_to_replace中的第二个字符,依此类推。

答案 1 :(得分:1)

编辑:在与OP进一步讨论之后,事实证明他需要一个从短字符串到整数的函数(在数学意义上)。这样的函数是ORA_HASH。 OP决定ORA_HASH可能是他的项目所需要的。

https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions112.htm#SQLRF06313

以下解决方案保留了历史视角。

您可以使用分析函数DENSE_RANK为字符串分配数字。

例如:

with
     employees ( id, first_name, last_name ) as (
       select 'ABC', 'Jane', 'Smith' from dual union all
       select 'ABD', 'Jane', 'Dryer' from dual union all
       select 'XYZ', 'Mike', 'Lopez' from dual
     )
--  End of simulated inputs (for testing purposes only).
--  Solution (SQL query) begins below this line.
select id, dense_rank() over (order by id) as num_id, first_name, last_name
from   employees
;

ID   NUM_ID  FIRST_NAME  LAST_NAME
---  ------  ----------  ---------
ABC       1  Jane        Smith
ABD       2  Jane        Dryer
XYZ       3  Mike        Lopez