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

时间:2011-07-14 15:05:26

标签: sql string db2 ip-address

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

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

16777216 * v + 65536 * x + 256 * y + z

其中IP的格式为v.x.y.z。大量的例子,来源here

因此,问题就变成了,如何解析IP地址字符串以拉出组件。

在Transact-SQL中,您可以使用PARSENAME轻松完成此操作,描述为here

如何在DB2 SQL中执行等效操作?

2 个答案:

答案 0 :(得分:1)

我没有找到比这更简洁的东西,但是下面的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

答案 1 :(得分:-1)

试试这个

选择IP,(CONVERT(bigint,PARSENAME(IP,1))+ CONVERT(bigint,PARSENAME(IP,2))* 256 + CONVERT(bigint,PARSENAME(IP,3))* 65536 + 来自IPTable的CONVERT(bigint,PARSENAME(IP,4))* 16777216)