在数据库中存的是地址如:
S_IP E_IP102.10.1.1 134.10.25.255
就是存的是地址段102.10.1.1 ~134.10.25.255我如何去判断 某个ip在这个段中哦?
S_IP E_IP102.10.1.1 134.10.25.255
就是存的是地址段102.10.1.1 ~134.10.25.255我如何去判断 某个ip在这个段中哦?
解决方案 »
- 字符串相加
- discuz 最新版有什么功能了?
- 请大家修改一段SQL语句
- 找指定串中的字符在mssql中有函数么?
- SQL一个单元格内的内容能进行查找替换吗?
- 文件与次文件
- 我终于明白SQL 这个很奇怪的问题。 在进行数据表的更新时, 弹出一个对话框:键列信息不足,或不正确, 更新影响到多行。
- 在备份数据库时发生如下错误:
- 请问:bcp实现TXT文件导入SQL Server数据库
- 如何能够把一个vfp表写坏!这里说的坏就是不能读了!!然后如何通过odbc使用共享的方式访问vfp!!
- 请教一个关于字段排序的sql语句的写法??
- 例如:表“数学”,有一个列“分数”,想将分数的列全部每行加5,请问怎么实现???
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 行)
*/
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')
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*/