我有很多表格,其中包含一个名为company的字段,可以包含在其中:
“假公司”或“5.5.5.5”
上面的数字地址当然是IP地址。
我不确定如何编写一个选择查询,该查询仅返回其中包含IP地址而不仅仅是文本的行。有什么想法吗?
答案 0 :(得分:4)
您可以在SQL-Server上使用RegularExpressions,例如:
INSERT INTO tIP VALUES('Fake Company');
INSERT INTO tIP VALUES('5.5.5.5');
INSERT INTO tIP VALUES('192.168.5.8');
INSERT INTO tIP VALUES('192.168.5.88');
DECLARE @regexPattern varchar(100);
SET @regexPattern='([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}';
SELECT * FROM tIP
WHERE dbo.RegexMatch( tIP.IP, @regexPattern ) = 1
这是函数:
CREATE FUNCTION [dbo].[RegexMatch](@Input [nvarchar](4000), @Pattern [nvarchar](4000))
RETURNS [bit] WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [RegexLib].[RegexLib.UserDefinedFunctions].[RegexMatch]
答案 1 :(得分:3)
有点粗糙,但这对你有用:
SELECT ColumnName FROM TableName WHERE ColumnName LIKE '%.%.%.%'
答案 2 :(得分:1)
另一种可能性是更换圆点并检查其余部分是否为数字:
SELECT ColumnName
FROM TableName
WHERE ISNUMERIC(REPLACE(ColumnName, '.', '')) = 1
它不像RegEx解决方案那么精确,但它足以区分IP地址与公司名称,也许它比RegEx或LIKE '%'
更快。