PARSENAME機能を使用して、IPアドレス値を4つの部分に分割して個別に比較することができます。
テストデータスクリプトを作成し、移入:
CREATE TABLE ipaddresses
(
ip VARCHAR(20) NOT NULL
);
INSERT INTO ipaddresses (ip) VALUES
('192.12.34.12'),
('192.12.#.12'),
('192.#.34.12');
シナリオ#1
DECLARE @userip VARCHAR(20)
SET @userip = '192.56.34.12'
;WITH ips AS
(
SELECT REPLACE(ip, '#', '%') AS ip
FROM ipaddresses
)
SELECT COUNT(ip) AS validcount
FROM ips
WHERE PARSENAME(@userip, 1) LIKE PARSENAME(ip, 1)
AND PARSENAME(@userip, 2) LIKE PARSENAME(ip, 2)
AND PARSENAME(@userip, 3) LIKE PARSENAME(ip, 3)
AND PARSENAME(@userip, 4) LIKE PARSENAME(ip, 4);
VALIDCOUNT
----------
1
シナリオ#2
DECLARE @userip VARCHAR(20)
SET @userip = '191.12.34.12'
;WITH ips AS
(
SELECT REPLACE(ip, '#', '%') AS ip
FROM ipaddresses
)
SELECT COUNT(ip) AS validcount
FROM ips
WHERE PARSENAME(@userip, 1) LIKE PARSENAME(ip, 1)
AND PARSENAME(@userip, 2) LIKE PARSENAME(ip, 2)
AND PARSENAME(@userip, 3) LIKE PARSENAME(ip, 3)
AND PARSENAME(@userip, 4) LIKE PARSENAME(ip, 4);
VALIDCOUNT
----------
0
幸運我々は、IPv6への移行時に、笑。 – Styxxy
また、私はこの例が単純化されており、5つ以上の比較が必要であると思われます。多分... heh –
あなたは#####と一致する必要はないと仮定して、15でなければなりません。 –