qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Oracle中IP地址和掩碼轉換成CIDR格式

            遇到的問題如下:數據庫中存儲了IP地址,以及IP地址掩碼,需要將他們轉化成CIDR格式的,并且不僅僅是將掩碼轉化成CIDR對應的數字的問題,需要將原有的IP地址轉化成對應的網絡地址,例如IP地址是58.247.221.238,掩碼是255.255.255.252,需要將其轉化為58.247.221.236/30。
            解決方案:我們知道,將IP地址和掩碼通過位與函數就能得到對應的網絡地址.Google一下,找到了將IPv4地址轉成數字以及轉化回來的函數。有了這兩個函數,再利用Oracle 自帶的bitand函數,問題就解決了。可以先將IP地址和掩碼通過字符串轉IP的函數轉成數字,然后通過位與運算就能得到相應的網絡地址對應的數字,再通過數字轉字符串的功能,即得到對應的網絡地址。至于/后面CIDR的數字,可以通過導入一張掩碼和CIDR數字的對應表得到,不在詳述.
            實際例子如下: 返回58.247.221.236
            Sql代碼
            select inttoip(BITAND(dottedQuadToNumber('58.247.221.238'),
            ottedQuadToNumber('255.255.255.252'))) from dual
            附: 將字符串轉成數字的函數:
            Sql代碼
          CREATE OR REPLACE function dottedQuadToNumber ( dottedQuad IN VARCHAR2) return number is
          Result NUMBER;
          begin
          Result:= (substr(dottedQuad ,
          1,
          (instr(dottedQuad , '.', 1, 1 ) - 1))
          * 256 * 256 * 256
          ) +
          (substr(dottedQuad ,
          instr(dottedQuad , '.', 1, 1 ) + 1,
          instr(dottedQuad , '.', 1, 2 ) -
          instr(dottedQuad , '.', 1, 1 ) - 1) * 256 * 256
          ) +
          (substr(dottedQuad ,
          instr(dottedQuad , '.', 1, 2 ) + 1,
          instr(dottedQuad , '.', 1, 3 ) -
          instr(dottedQuad , '.', 1, 2 ) - 1) * 256
          ) +
          (substr(dottedQuad ,
          instr(dottedQuad , '.', 1, 3 ) + 1)
          ) ;
          return(Result );
          end dottedQuadToNumber ;
            數字轉成ip地址的函數:
            Sql代碼
          CREATE OR REPLACE function inttoip(ip_address integer) return varchar2
          deterministic
          is
          begin
          return to_char(mod(trunc(ip_address /256/ 256/256 ),256))
          || '.'|| to_char(mod(trunc(ip_address/ 256/256 ),256))
          || '.'|| to_char(mod(trunc(ip_address/ 256),256 ))
          || '.'|| to_char(mod(ip_address, 256));
          end;

          posted on 2014-08-04 09:58 順其自然EVO 閱讀(265) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 包头市| 泸水县| 云和县| 镇安县| 仁寿县| 广丰县| 平泉县| 高州市| 潞城市| 沈丘县| 德州市| 罗甸县| 金山区| 汶川县| 大城县| 南京市| 铜山县| 汝城县| 佛教| 滨州市| 凤山县| 永寿县| 唐海县| 响水县| 太谷县| 突泉县| 庆安县| 房产| 阿瓦提县| 军事| 柯坪县| 衡阳市| 定陶县| 黄骅市| 遂平县| 上林县| 清水河县| 公主岭市| 晋宁县| 昭苏县| 乌兰察布市|