如何在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中执行等效操作?
答案 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)