-----------------------元の質問---------------------- -SQLの範囲(1.0.0.0〜1.0.0.24)として1.0.0.0/24をどのように読むことができますか?
私はIP 1.0.88.12
を持っていると仮定します。私はIPv4データベースに対して照会し、正しい国を返すことを望みます。
データベース(geodata
)テーブル(IP
)は、次の形式でIPアドレスを一覧表示されている:ここ
network country
---------------------
1.0.0.0/24 1212
1.0.1.0/24 1212
... ...
1.0.88.0/22 3000
、私は1.0.88.0/22
が1.0.88.22
に1.0.88.0
、1.0.88.1
、1.0.88.2
を表すと仮定する。
network
が実際には範囲であることを理解できるように、このテーブルをクエリするにはどうすればよいですか?
-----------------------進行中の更新-------------------- ---
私の推測では間違っていたので、すべての入力のおかげで!しかしまだ1つの質問は傑出した。
(私が今持っているものの)次の例ください:ポイントがある
/**
* Convert IP 4-octed set into integer
*/
create function [dbo].[IPAddressToInteger] (@IP as varchar(15))
returns bigint
as
begin
return (convert(bigint, parsename(@IP,1)) +
convert(bigint, parsename(@IP,2)) * 256 +
convert(bigint, parsename(@IP,3)) * 256 * 256 +
convert(bigint, parsename(@IP,4)) * 256 * 256 * 256)
end
/**
* Calculate CIDR from mask
*/
create function [dbo].[CIDRFromMask] (@mask as bigint)
returns varchar(5)
as
begin
declare @maskCalc bigint
select @maskCalc = dbo.IPAddressToInteger('255.255.255.255') - @mask + 1
declare @logCalc int
select @logCalc = (32 - log(@maskCalc, 2))
return '/' + cast(@logCalc as varchar(5))
end
select dbo.IPAddressToInteger('195.65.254.11'); -- 3275881995
select select dbo.CIDRFromMask('3275881995'); -- /2
select '195.65.254.11/2' from geodata.IP -- 0 results
select '195.65.254.0/2' from geodata.IP -- 1 result (seems correct)
を:私はIP + CIDRを連結する場合、私は私の知る限りである(GEOデータベースに対応したIPを見つけることができません。完全なデータベース)。私が手動で195.65.254.11/2
を195.65.254.0/2
に変換すると結果は見つかりますが、これはやり方ではないと思います。したがって:どのステップはまだ私は行方不明ですか?
注有効なアドレス '1.0.88.0/22'は通常、範囲は' 1.0ではないことを、「最初の22ビットがネットワークである」を意味すること。 88.1'-1.08.8.22'。これはあなた自身のIP範囲形式ですか、あるいはちょうどCIDR表記を誤解していますか?それが地理データ表であるとすれば、ネットワークはCIDRであると思うので、 '1.0.0.0/24'は' 1.0.0.1'-'1.0.0.255'にマップされます。 – Luaan
あなたはこれが本当に必要なのですか? [Subnetting here](https://en.wikipedia.org/wiki/Subnetwork)=> 'セクション 'サブネットとホスト数' –
または[CIDR表記法についてはこちらを読む](https://en.wikipedia .org/wiki/Classless_Inter-Domain_Routing#CIDR_notation) –