Ip算法匹配

wishY 2008-07-11 03:10:59

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是否在这里面.? *位置不确定
...全文
594 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
振乾 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chuifengde 的回复:]
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……
[/Quote]

good
okook 2008-08-03
  • 打赏
  • 举报
回复
不错,学习~~
liuyun1987 2008-08-03
  • 打赏
  • 举报
回复
留个记号
wishY 2008-07-11
  • 打赏
  • 举报
回复
感谢大家,先验证楼上,通过.
hery2002 2008-07-11
  • 打赏
  • 举报
回复
使用函数或者parsename();
utpcb 2008-07-11
  • 打赏
  • 举报
回复
mark揭帖料吧 以上已经写给你了
chuifengde 2008-07-11
  • 打赏
  • 举报
回复
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 '不匹配'
wzy_love_sly 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wishY 的回复:]
那如果 是传个IP 过去 匹配 211.184.1.2,117.*.3.256,202.180.*.1 的其中一个呢
[/Quote]

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

set @ip='117.2.3.256'


楼主多结结帖,谢谢
wishY 2008-07-11
  • 打赏
  • 举报
回复
那如果 是传个IP 过去 匹配 211.184.1.2,117.*.3.256,202.180.*.1 的其中一个呢
wzy_love_sly 2008-07-11
  • 打赏
  • 举报
回复
能结帖不?汗
wzy_love_sly 2008-07-11
  • 打赏
  • 举报
回复
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



wzy_love_sly 2008-07-11
  • 打赏
  • 举报
回复
create table tb(ip varchar(50))
insert into tb select '211.184.1.2,117.*.3.256,202.180.*.1'

select top 1000 id=identity(int,1,1) into # from sysobjects a,sysobjects b

declare @ip varchar(50)
set @ip='117.5.3.256'

select * 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


ip tpip
211.184.1.2,117.*.3.256,202.180.*.1 117.*.3.256
wzy_love_sly 2008-07-11
  • 打赏
  • 举报
回复
这得拆分判断n多....
hery2002 2008-07-11
  • 打赏
  • 举报
回复
什么意思?
就是这三个段么?
IP限制的话,应该都有固定的段,
如果没有固定的段,
也就没有了比较的基础了,

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧