ITPub博客

首页 > 数据库 > Oracle > rowid 64进制转换到10进制

rowid 64进制转换到10进制

原创 Oracle 作者:yaoronghui2005 时间:2009-09-17 13:55:38 0 删除 编辑

DIY

[@more@]Create Or Replace Function f_Ten_To_64(Fs_Value In Varchar2) Return Number Is
/*******************
description: convert 10 to 64
author:yaoronghui
time :2009-09-17 13:15--20
********************/
Result Number := 0;
Ll_Value Int; --当前字符对应的64进制中的数字
Begin
--64进制 A-Z 0-25;a-z 26-51 0-9 52-61; 62 +;63 /
--如何借助ascii实现计算
For i In 1 .. Length(Fs_Value) Loop
Case
When Regexp_Like(Substr(Fs_Value, i, 1), '^[A-Z]$') Then
--范围是A-Z '[65-90]',则对应0-25
Ll_Value := Ascii(Substr(Fs_Value, i, 1)) - 65 + 0;
When Regexp_Like(Substr(Fs_Value, i, 1), '^[a-z]$') Then
--范围是a-z '[97-122]',则对应26-51
Ll_Value := Ascii(Substr(Fs_Value, i, 1)) - 97 + 26;
When Regexp_Like(Substr(Fs_Value, i, 1), '^[0-9]$') Then
--范围是0-9 '[48-57]',则对应52-61
Ll_Value := Ascii(Substr(Fs_Value, i, 1)) - 48 + 52;
When Regexp_Like(Substr(Fs_Value, i, 1), '^[+]$') Then
--范围是+,则对应62
Ll_Value := 62;
When Regexp_Like(Substr(Fs_Value, i, 1), '^[/]$') Then
--范围是+,则对应63
Ll_Value := 63;
Else
Null;
End Case;
Result := Result + Ll_Value * Power(64, Length(Fs_Value) - i);
End Loop;
Return Result;
Exception
When Others Then
Null;
End f_Ten_To_64;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/450962/viewspace-1027061/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    153
  • 访问量
    176622