CSDN-CSDN社区-MS-SQL Server-基础类

收藏 Ip算法匹配[问题点数:50,结帖人:wishY]

  • wishY
  • (飞扬)
  • 等 级:
  • 结帖率:
楼主发表于:2008-07-11 15:10:59
SQL code

SELECT  LoginIP.LoginIp
FROM AdminInfo INNER JOIN
      LoginIP ON AdminInfo.AdminID = LoginIP.AdminID
      where AdminInfo.AdminID = @AdminID


结果
LoginIP
-----------------
211.184.1.2,117.*.3.256,202.180.*.1

其中 逗号为IP分隔,*号为通配符,怎么确定传进来一Ip是否在这里面.? *位置不确定
回复次数:13
  • hery2002用户头像
  • hery2002
  • (苦*行*僧)
  • 等 级:
  • 2

    2

#1楼 得分:0回复于:2008-07-11 15:14:49
什么意思?
就是这三个段么?
IP限制的话,应该都有固定的段,
如果没有固定的段,
也就没有了比较的基础了,
#2楼 得分:0回复于:2008-07-11 15:17:14
这得拆分判断n多....
#3楼 得分:40回复于:2008-07-11 15:25:22
#4楼 得分:0回复于:2008-07-11 15:26:42
SQL code
declare @ip varchar(50)
set @ip='117.2.3.256'

select ip from (
SELECT a.*,RIGHT(stuff(ip+',',id,len(ip),''),charindex(',',reverse(stuff(','+ip+',',id,len(ip),'')))) as 'tpip'
FROM tb a
INNER JOIN # b
ON SUBSTRING(ip+',',id,1)=',') t
where 
parsename(@ip,4)=case when parsename(tpip,4)='*' then parsename(@ip,4) else parsename(tpip,4) end
and parsename(@ip,3)=case when parsename(tpip,3)='*' then parsename(@ip,3) else parsename(tpip,3) end
and parsename(@ip,2)=case when parsename(tpip,2)='*' then parsename(@ip,2) else parsename(tpip,2) end
and parsename(@ip,1)=case when parsename(tpip,1)='*' then parsename(@ip,1) else parsename(tpip,1) end


211.184.1.2,117.*.3.256,202.180.*.1


#5楼 得分:0回复于:2008-07-11 15:27:44
能结帖不?汗
  • wishY用户头像
  • wishY
  • (飞扬)
  • 等 级:
#6楼 得分:0回复于:2008-07-11 15:28:03
那如果 是传个IP 过去 匹配 211.184.1.2,117.*.3.256,202.180.*.1  的其中一个呢
#7楼 得分:0回复于:2008-07-11 15:32:16
引用 6 楼 wishY 的回复:
那如果 是传个IP 过去 匹配 211.184.1.2,117.*.3.256,202.180.*.1  的其中一个呢


这就是匹配其中的一个,没卡

SQL code
set @ip='117.2.3.256'


楼主多结结帖,谢谢
#8楼 得分:10回复于:2008-07-11 15:32:41
SQL code
CREATE   FUNCTION GetIP(@ip varchar(20))
RETURNS varchar(20)
AS
BEGIN
	DECLARE @IPre varchar(20)
	
	SET @IPre=''
	IF ISnumeric(parsename(@ip,4))=1
		SET @IPre=RIGHT('000'+parsename(@ip,4),3)+'.'
	IF ISnumeric(parsename(@ip,3))=1
		SET @IPre=@IPre+RIGHT('000'+parsename(@ip,3),3)+'.'
	ELSE 
		SET @IPre=@IPre+'%'+'.'
	IF ISnumeric(parsename(@ip,2))=1
		SET @IPre=@IPre+RIGHT('000'+parsename(@ip,2),3)+'.'
	ELSE 
		SET @IPre=@IPre+'%'+'.'
	IF iSnumeric(parsename(@ip,1))=1
		SET @IPre=@IPre+RIGHT('000'+parsename(@ip,1),3)
	ELSE 
		SET @IPre=@IPre+'%'

	
	RETURN @IPre
END
go

DECLARE @ip varchar(20)
SET @ip='211.184.1.2'--'117.234.3.254'

DECLARE @s varchar(100)
SET @s='211.184.1.2,117.*.3.256,202.180.*.1'
DECLARE @a TABLE(id int IDENTITY(1,1),b int)
INSERT @a SELECT TOP 100 0 FROM syscolumns

IF EXISTS(SELECT 1
	FROM
	(
		SELECT SUBSTRING(@s+',',id,charindex(',',@s+',',id)-id) ip
		FROM @a
		WHERE substring(','+@s,id,1)=','
	)aa WHERE dbo.getip(@ip) LIKE dbo.getip(ip))
	PRINT '匹配'
ELSE
	PRINT '不匹配'
  • utpcb用户头像
  • utpcb
  • (无欲则刚)
  • 等 级:
#9楼 得分:0回复于:2008-07-11 15:32:43
mark揭帖料吧 以上已经写给你了
  • hery2002用户头像
  • hery2002
  • (苦*行*僧)
  • 等 级:
  • 2

    2

#10楼 得分:0回复于:2008-07-11 15:45:19
使用函数或者parsename();
  • wishY用户头像
  • wishY
  • (飞扬)
  • 等 级:
#11楼 得分:0回复于:2008-07-11 16:11:32
感谢大家,先验证楼上,通过.
  • okook用户头像
  • okook
  • (一天一个愿望)
  • 等 级:
#12楼 得分:0回复于:2008-08-03 00:27:39
不错,学习~~
#13楼 得分:0回复于:2008-08-03 20:15:36
留个记号
相关问题
求一个IP匹配算法
得到工作站的IP如何和提供的IP库来匹配该IP属于哪个省下的那个地市的IP ...
如何判断一个IP地址在一个IP地址段?
求一个验证IP及掩码正确性的算法.. Java / J2EE / EJB / JMS - CSDN ...
关于算法Java / Web 开发- CSDN社区community.csdn.net
字符串的快速模式匹配算法,各位高手给看下,哪里出错了,给改一下。