如何在DB2SQL中拆分IP地址字符串(用于转换为IP号)?

如何在DB2SQL中拆分IP地址字符串(用于转换为IP号)?,sql,string,db2,ip-address,Sql,String,Db2,Ip Address,在DB2SQL中,如何将IP地址字符串转换为IP地址号(对IP国家检测有用) 转换为数字很容易,您可以执行以下操作: 16777216 * v + 65536 * x + 256 * y + z 其中IP的形式为v.x.y.z。大量的例子,这方面的来源 因此,问题就变成了,如何解析IP地址字符串来提取组件 在Transact-SQL中,您可以使用PARSENAME轻松完成此操作,如下所述 如何在DB2 SQL中实现类似的功能?我没有发现比这更简洁、更简单的方法,但是下面的SQL可以完成这项工作

在DB2SQL中,如何将IP地址字符串转换为IP地址号(对IP国家检测有用)

转换为数字很容易,您可以执行以下操作:

16777216 * v + 65536 * x + 256 * y + z
其中IP的形式为
v.x.y.z
。大量的例子,这方面的来源

因此,问题就变成了,如何解析IP地址字符串来提取组件

在Transact-SQL中,您可以使用
PARSENAME
轻松完成此操作,如下所述


如何在DB2 SQL中实现类似的功能?

我没有发现比这更简洁、更简单的方法,但是下面的SQL可以完成这项工作

SELECT
    LO.IPAddress
    16777216 * CAST(LEFT(LO.IPAddress, LOCATE('.', LO.IPAddress, 1)-1) AS BIGINT)
    +  65536 * CAST(SUBSTR(LO.IPAddress, LOCATE('.', LO.IPAddress, 1) + 1, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) - LOCATE('.', LO.IPAddress, 1) - 1) AS BIGINT)
    +    256 * CAST(SUBSTR(LO.IPAddress, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) + 1, LOCATE('.', LO.IPAddress, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) +1) - LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) - 1) AS BIGINT) 
    +          CAST(RIGHT(LO.IPAddress, LENGTH(LO.IPAddress) - LOCATE('.', LO.IPAddress, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) +1)) AS BIGINT)
    AS IPNumber

FROM Login LO

我还没有发现任何比这更干净、更简单的方法,但是下面的SQL可以完成这项工作

SELECT
    LO.IPAddress
    16777216 * CAST(LEFT(LO.IPAddress, LOCATE('.', LO.IPAddress, 1)-1) AS BIGINT)
    +  65536 * CAST(SUBSTR(LO.IPAddress, LOCATE('.', LO.IPAddress, 1) + 1, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) - LOCATE('.', LO.IPAddress, 1) - 1) AS BIGINT)
    +    256 * CAST(SUBSTR(LO.IPAddress, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) + 1, LOCATE('.', LO.IPAddress, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) +1) - LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) - 1) AS BIGINT) 
    +          CAST(RIGHT(LO.IPAddress, LENGTH(LO.IPAddress) - LOCATE('.', LO.IPAddress, LOCATE('.', LO.IPAddress,LOCATE('.', LO.IPAddress, 1) +1) +1)) AS BIGINT)
    AS IPNumber

FROM Login LO
试试这个

选择IP,(CONVERT(bigint,PARSENAME(IP,1))+CONVERT(bigint,PARSENAME(IP,2))*256+CONVERT(bigint,PARSENAME(IP,3))*65536+ 从IPTable转换(bigint,PARSENAME(IP,4))*16777216

选择IP,(CONVERT(bigint,PARSENAME(IP,1))+CONVERT(bigint,PARSENAME(IP,2))*256+CONVERT(bigint,PARSENAME(IP,3))*65536+
从IPTable转换(bigint,PARSENAME(IP,4))*16777216)这很有帮助。非常感谢。现在,如果有人将AWK嵌入到SQL中,我们就不需要像这样疯狂的代码了。这很有帮助。非常感谢。现在,如果有人将AWK嵌入到SQL中,我们就不需要像这样疯狂的代码了