91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中通過函數實現二、八、十、十六進制任意轉換

發布時間:2020-08-11 06:54:07 來源:ITPUB博客 閱讀:438 作者:stotf 欄目:關系型數據庫

說明:本文主要參考于: http://www.eygle.com/archives/2004/06/oracle_howto_convert.html

一、先創建兩個基本的進制轉換函數:

    1.其他進制(2,8,16)轉換為十進制

    Create Or Replace Function To_Dec(p_Str       In Varchar2,    --要轉換的數字(2,8,16進制)
                                      p_From_Base In Number Default 16)    --轉換前的進制
      Return Number Is
      i_Num Number Default 0;
      i_Hex Varchar2(16) Default '0123456789ABCDEF';
    Begin
      For i In 1 .. Length(p_Str) Loop
        i_Num := i_Num * p_From_Base + Instr(i_Hex, Upper(Substr(p_Str, i, 1))) - 1;
      End Loop;
      Return i_Num;
    End To_Dec;

    2.十進制轉換為其它進制(2,8,16)

    Create Or Replace Function To_Base(p_Dec In Number,    --要轉換的數字(10進制)
                                       p_Base In Number)   --轉換后的進制
      Return Varchar2 Is
      i_Str Varchar2(255) Default Null;
      i_Num Number Default p_Dec;
      i_Hex Varchar2(16) Default '0123456789ABCDEF';
    Begin
      If Trunc(p_Dec) <> p_Dec Or p_Dec < 0 Then
        Raise Program_Error;
      End If;
      Loop
        i_Str := Substr(i_Hex, Mod(i_Num, p_Base) + 1, 1) || i_Str;
        i_Num := Trunc(i_Num / p_Base);
        Exit When i_Num = 0;
      End Loop;
      Return i_Str;
    End To_Base;

二、通過上面兩個函數,可以將10進制作為轉換的中間橋梁。在進行任意進制轉換時,都可以先將要轉換的進制轉為10進         制,然后再通過10進制轉換為別的進制。 通過下面函數來實現:

    Create Or Replace Function Bodh_Convert(p_Str  In Varchar2, --要轉換的數字(2,8,10,16進制)
                                            p_From Number,      --轉換前的進制
                                            p_To   Number)      --轉換后的進制
      Return Varchar2 Is
      v_Temp Number Default 0;
      v_Num  Varchar2(128) Default Null;
    Begin
      If p_From = 2 Then
        If p_To = 8 Then
          v_Temp := To_Dec(p_Str, p_From);
          v_Num  := To_Base(v_Temp, p_To);
        Elsif p_To = 10 Then
          v_Num := To_Dec(p_Str, p_From);
        Elsif p_To = 16 Then
          v_Temp := To_Dec(p_Str, p_From);
          v_Num  := To_Base(v_Temp, p_To);
        End If;
      Elsif p_From = 8 Then
        If p_To = 2 Then
          v_Temp := To_Dec(p_Str, p_From);
          v_Num  := To_Base(v_Temp, p_To);
        Elsif p_To = 10 Then
          v_Num := To_Dec(p_Str, p_From);
        Elsif p_To = 16 Then
          v_Temp := To_Dec(p_Str, p_From);
          v_Num  := To_Base(v_Temp, p_To);
        End If;
      Elsif p_From = 10 Then
        If p_To = 2 Then
          v_Num := To_Base(To_Number(p_Str), p_To);
        Elsif p_To = 8 Then
          v_Num := To_Base(To_Number(p_Str), p_To);
        Elsif p_To = 16 Then
          v_Num := To_Base(To_Number(p_Str), p_To);
        End If;
      Elsif p_From = 16 Then
        If p_To = 2 Then
          v_Temp := To_Dec(p_Str, p_From);
          v_Num  := To_Base(v_Temp, p_To);
        Elsif p_To = 8 Then
          v_Temp := To_Dec(p_Str, p_From);
          v_Num  := To_Base(v_Temp, p_To);
        Elsif p_To = 10 Then
          v_Num := To_Dec(p_Str, p_From);
        End If;
      End If;
      Return v_Num;
    Exception
      When Others Then
        Dbms_Output.Put_Line('請輸入正確的參數');
    End Bodh_Convert;

三、示例:

    SQL> select bodh_convert('1111',2,8) from dual;    --2進制轉8進制
     
    BODH_CONVERT('1111',2,8)
    --------------------------------------------------------------------------------
    17
     
    SQL> select bodh_convert('1111',2,10) from dual;    --2進制轉10進制
     
    BODH_CONVERT('1111',2,10)
    --------------------------------------------------------------------------------
    15
     
    SQL> select bodh_convert('1111',2,16) from dual;    --2進制轉16進制
     
    BODH_CONVERT('1111',2,16)
    --------------------------------------------------------------------------------
    F

   



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锡林郭勒盟| 来凤县| 黑龙江省| 莎车县| 德化县| 新安县| 城固县| 中方县| 米脂县| 龙门县| 乡宁县| 北流市| 灵寿县| 荣昌县| 宁海县| 梅州市| 台湾省| 进贤县| 都江堰市| 阜新市| 长岛县| 景洪市| 吉林市| 正阳县| 桃源县| 玉林市| 菏泽市| 德格县| 兰坪| 丽江市| 师宗县| 蓬溪县| 乐昌市| 乐陵市| 衡水市| 昌黎县| 成都市| 江阴市| 汽车| 仁化县| 临西县|