2011-07-14 13 views
1

DB2 SQLでIPアドレス文字列をIPアドレス番号(IPアドレス検出に便利)に変換するにはどうすればよいですか? IPフォームv.x.y.zであるDB2 SQLでIPアドレス文字列を分割する方法(IP番号に変換するため)?

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

:数への変換

は簡単です、あなたのような何かをします。例の多くは、これのためのソースhereです。

したがって、問題は、どのようにコンポーネントを引き出すためにIPアドレス文字列を解析するかになります。

Transact-SQLでは、これを簡単に行うためにPARSENAMEを使用できます(here)。

どのようにDB2 SQLで同等の処理を実行できますか?

答えて

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 
+0

これは助けになりました。ありがとうございました。今では誰かがAWKをSQLの中に埋め込むだけであれば、このような狂気のコードは必要ありません。 –

-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)

+0

質問によると、 'PARSENAME'はDB2では利用できません(あるいは、書いている時は確かに...) – xan

関連する問題