Как разделить строку IP-адреса в DB2 SQL (для преобразования в IP-номер)? - PullRequest
1 голос
/ 14 июля 2011

Как преобразовать строку IP-адреса в номер IP-адреса (полезно для определения страны IP) в DB2 SQL?

Преобразование в число легко, вы делаете что-то вроде:

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

, где IP находится в форме v.x.y.z. Множество примеров, источник для этого здесь .

Итак, возникает проблема, как разобрать строку IP-адреса для извлечения компонентов.

В Transact-SQL вы можете легко использовать это PARSENAME, описанное здесь .

Как вы можете сделать эквивалент в DB2 SQL?

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Я не нашел ничего более понятного и простого, чем этот, но следующий 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
0 голосов
/ 02 февраля 2016

Попробуйте это

выберите IP, (CONVERT (bigint, PARSENAME (IP, 1)) + CONVERT (bigint, PARSENAME (IP, 2)) * 256 + CONVERT (bigint, PARSENAME (IP, 3)) * 65536 + КОНВЕРТ (bigint, PARSENAME (IP, 4)) * 16777216) из IPTable

...