Oracle11g 在oracle sql中计算IP地址十进制表示
我想在SQL中获取给定IP地址的十进制值 示例192.168.0.0其十进制表示为3232235520 我正在使用Oracle11g,我提出了上述方法 使用ult_raw.cast_from_binary_integer将八位字节转换为二进制表示,但内部二进制转换为十六进制表示。因此,内部查询的输出基本上是八位字节的十六进制表示。 十六进制表示法是通过将4个二进制字符组合在一起获得的,例如10002=816 因此,获取十进制值100010002等于获取8816的值 我已经附加了十六进制表示,用cnt列保留八位字节的顺序,并用LISTAGG对结果进行聚类 更新Oracle11g 在oracle sql中计算IP地址十进制表示,oracle11g,ip-address,Oracle11g,Ip Address,我想在SQL中获取给定IP地址的十进制值 示例192.168.0.0其十进制表示为3232235520 我正在使用Oracle11g,我提出了上述方法 使用ult_raw.cast_from_binary_integer将八位字节转换为二进制表示,但内部二进制转换为十六进制表示。因此,内部查询的输出基本上是八位字节的十六进制表示。 十六进制表示法是通过将4个二进制字符组合在一起获得的,例如10002=816 因此,获取十进制值100010002等于获取8816的值 我已经附加了十六进制表示,用c
我正在使用listag和connectby子句。当我尝试转换1000条记录时,这是否有任何性能问题。正如建议的那样,它简单易读,但没有数学解释。这使用了PL/SQL函数,我将把它作为我的最后手段
SELECT
TO_NUMBER(REGEXP_SUBSTR('127.0.0.1','\w+',1,1))*POWER(2,24)
+ TO_NUMBER(REGEXP_SUBSTR('127.0.0.1','\w+',1,2))*POWER(2,16)
+ TO_NUMBER(REGEXP_SUBSTR('127.0.0.1','\w+',1,3))*POWER(2,8)
+ TO_NUMBER(REGEXP_SUBSTR('127.0.0.1','\w+',1,4))*POWER(2,0) IP
FROM
DUAL;
假设我的IPADDRESS=255.127.72.1
二进制表示将是
11111111.01111111.01001000.00000001
我能够用下面的方法消除子查询
select sum(regexp_substr('255.127.72.1', '\d+', 1, rownum) * POWER(2, 32 - 8*rownum)) as binary1
from dual connect by rownum <= 4
你如何定义“更好”?从示例地址获取相同的十进制值。或者具有双向转换的函数,这在某些情况下可能会很有用。 converting to decimal first octet 1.231 + 1.230 + 1.229 + 1.228 + 1.227 + 1.226 + 1.225 + 1.224 = (1.27 + 1.26 + 1.25 + 1.24 + 1.23 + 1.22 + 1.21 + 1.1).224 = (28 - 1).224 = (255).224 second octet 0.223 + 1.222 + 1.221 + 1.220 + 1.219 + 1.218 + 1.217 + 1.216 = (0.27 + 1.26 + 1.25 + 1.24 + 1.23 + 1.22 + 1.21 + 1.1).216 = (27 - 1).216 = (127).216 third octet 0.215 + 1.214 + 0.213 + 0.212 + 1.211 + 0.210 + 0.29 + 0.28 = (0.27 + 1.26 + 0.25 + 0.24 + 1.23 + 0.22 + 0.21 + 0.1).216 = (26 + 1.23).216 = (72).216 similarly the last octet
select sum(regexp_substr('255.127.72.1', '\d+', 1, rownum) * POWER(2, 32 - 8*rownum)) as binary1
from dual connect by rownum <= 4