我应该在SQL Server中选择什么数据类型来存储IP地址?
通过选择正确的数据类型,过滤IP地址会变得容易吗?
我应该在SQL Server中选择什么数据类型来存储IP地址?
通过选择正确的数据类型,过滤IP地址会变得容易吗?
我们经常需要处理需要确定哪些IP在特定子网中的工作。我发现最简单和最可靠的方法是:
ALTER FUNCTION [dbo].[IP_To_INT ]
(
@IP CHAR(15)
)
RETURNS BIGINT
AS
BEGIN
DECLARE @IntAns BIGINT,
@block1 BIGINT,
@block2 BIGINT,
@block3 BIGINT,
@block4 BIGINT,
@base BIGINT
SELECT
@block1 = CONVERT(BIGINT, PARSENAME(@IP, 4)),
@block2 = CONVERT(BIGINT, PARSENAME(@IP, 3)),
@block3 = CONVERT(BIGINT, PARSENAME(@IP, 2)),
@block4 = CONVERT(BIGINT, PARSENAME(@IP, 1))
IF (@block1 BETWEEN 0 AND 255)
AND (@block2 BETWEEN 0 AND 255)
AND (@block3 BETWEEN 0 AND 255)
AND (@block4 BETWEEN 0 AND 255)
BEGIN
SET @base = CONVERT(BIGINT, @block1 * 16777216)
SET @IntAns = @base +
(@block2 * 65536) +
(@block3 * 256) +
(@block4)
END
ELSE
SET @IntAns = -1
RETURN @IntAns
END
bigint
不能存储所有的IPv6地址,因为它只有8个字节,而IPv6协议需要16个字节。 - cdimitroulas我目前正在使用 varchar(15)
,一切都在正常工作。插入、更新、选择。我刚刚开始开发一个涉及 IP 地址的应用程序,尽管我还没有做太多的开发工作。
以下是选择语句:
select * From dbo.Server
where [IP] = ('132.46.151.181')
Go