在数据库中存的是地址如:
S_IP                 E_IP102.10.1.1           134.10.25.255
就是存的是地址段102.10.1.1 ~134.10.25.255我如何去判断 某个ip在这个段中哦?

解决方案 »

  1.   

    http://topic.csdn.net/u/20090923/12/311becef-4172-4b8e-8977-18f78653b958.html
      

  2.   

    create table tb(S_IP varchar(15),E_IP varchar(15))
    insert into tb values('102.10.1.1','134.10.25.255')
    godeclare @ip as varchar(15)
    set @ip = '102.10.1.2'select * from tb where 
    right('00'+parsename(@ip,4),3) + right('00'+parsename(@ip,3),3) + right('00'+parsename(@ip,2),3) + right('00'+parsename(@ip,1),3) 
    between
    right('00'+parsename(S_IP,4),3) + right('00'+parsename(S_IP,3),3) + right('00'+parsename(S_IP,2),3) + right('00'+parsename(S_IP,1),3) 
    and
    right('00'+parsename(E_IP,4),3) + right('00'+parsename(E_IP,3),3) + right('00'+parsename(E_IP,2),3) + right('00'+parsename(E_IP,1),3) drop table tb/*
    S_IP            E_IP            
    --------------- --------------- 
    102.10.1.1      134.10.25.255(所影响的行数为 1 行)
    */
      

  3.   

    create function f_checkIP(@IP varchar(20),@IP_ST varchar(20),@IP_ED varchar(20))
    returns bit
    as
    begin
        select @IP    = right('00'+ParseName(@IP,4),3)+'.'+
                        right('00'+ParseName(@IP,3),3)+'.'+
                        right('00'+ParseName(@IP,2),3)+'.'+
                        right('00'+ParseName(@IP,1),3),
               @IP_ST = right('00'+ParseName(@IP_ST,4),3)+'.'+
                        right('00'+ParseName(@IP_ST,3),3)+'.'+
                        right('00'+ParseName(@IP_ST,2),3)+'.'+
                        right('00'+ParseName(@IP_ST,1),3),
               @IP_ED = right('00'+ParseName(@IP_ED,4),3)+'.'+
                        right('00'+ParseName(@IP_ED,3),3)+'.'+
                        right('00'+ParseName(@IP_ED,2),3)+'.'+
                        right('00'+ParseName(@IP_ED,1),3)
                        
        if (@IP between @IP_ST and @IP_ED)
            return 1
        
        return 0
    end
    go
    select dbo.f_checkIP('4.208.48.215','4.43.69.96','4.208.48.255')
    select dbo.f_checkIP('4.43.69.95'  ,'4.43.69.96','4.208.48.255')
      

  4.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_IP2Int]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_IP2Int]
    GO--1. 字符串IP地址转换成IP数值函数。
    CREATE FUNCTION dbo.f_IP2Int(
    @ip char(15)
    )RETURNS bigint
    AS
    BEGIN
        DECLARE @re bigint
        SET @re=0
        SELECT @re=@re+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID
            ,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')
        FROM(
            SELECT ID=CAST(16777216 as bigint)
            UNION ALL SELECT 65536
            UNION ALL SELECT 256
            UNION ALL SELECT 1)a
        RETURN(@re)
    ENDgo
    if   dbo.f_IP2Int('104.43.69.100' )  between dbo.f_IP2Int('102.10.1.1') and dbo.f_IP2Int('134.10.25.255')
        print 'OK'
    else 
        Print 'NO'/*
    OK*/