Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#8

AW: SQL Select gesucht - IP Adresse zwischen IP Min und IP Max

  Alt 9. Dez 2014, 15:51
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
  Mit Zitat antworten Zitat