Schnell mal gebastelt ..
SQL Funktion "IPAddressBetween(Adresse, Bereich-Beginn, Bereich-Ende)"
Delphi-Quellcode:
SELECT dbo.IPAddressBetween('192.168.10.10','192.168.10.11','192.168.10.100');
>> 0
SELECT dbo.IPAddressBetween('192.168.10.10','192.168.10.1','192.168.10.100');
>> 1
In der
DB musst Du dafür einmalig 2 Skalarwertfunktionen anlegen.
Vorab .. Ja. Das Errorhandling bei Übergabe falscher Werte kannst Du selbst einbauen.
Code:
CREATE FUNCTION [dbo].[IPStringToInt](
@IPAddressString VARCHAR(15)
)
RETURNS BIGINT
BEGIN
declare @Oktett1 TinyInt;
declare @Oktett2 TinyInt;
declare @Oktett3 TinyInt;
declare @Oktett4 TinyInt;
declare @OktettWert1 BIGINT;
declare @OktettWert2 BIGINT;
declare @OktettWert3 BIGINT;
declare @OktettWert4 BIGINT;
declare @result BIGINT = -1;
SELECT @Oktett1 = PARSENAME(@IPAddressString,4);
SELECT @Oktett2 = PARSENAME(@IPAddressString,3);
SELECT @Oktett3 = PARSENAME(@IPAddressString,2);
SELECT @Oktett4 = PARSENAME(@IPAddressString,1);
SET @OktettWert1 = POWER(@Oktett1,4)
SET @OktettWert2 = POWER(@Oktett2,3)
SET @OktettWert3 = POWER(@Oktett3,2)
SET @OktettWert4 = POWER(@Oktett4,1)
SET @result = @OktettWert1 + @OktettWert2 + @OktettWert3 + @OktettWert4;
return @result;
END
Code:
CREATE FUNCTION [dbo].[IPAddressBetween]
(
@IPAddress Varchar(15),
@RangeStart VARCHAR(15),
@RangeEnd VARCHAR(15)
)
RETURNS Bit
AS
BEGIN
declare @IPValue BIGINT = dbo.IPStringToInt(@IPAddress)
declare @RangeStartValue BIGINT = dbo.IPStringToInt(@RangeStart)
declare @RangeEndValue BIGINT = dbo.IPStringToInt(@RangeEnd)
declare @result BIT
IF (@IPValue >= @RangeStartValue) AND (@IPValue <= @RangeEndValue)
set @result = 1
ELSE
set @result = 0
RETURN @result
END