2011-07-21 69 views
2

我有一個域名爲公司相當多的表是可以在他們:SQL查詢帶回僅包含數字(具體的IP地址)字段

「假公司」或「5.5.5.5 「

當然上面的數字地址是一個IP地址。

我不知道我該如何去編寫一個選擇查詢,只返回只包含IP地址的行,而不僅僅是文本。有任何想法嗎?

+0

哪個數據庫和版本? – Chandu

+0

請記住,IP地址不只是數字,它也是DOT。 –

+1

爲什麼你會在桌上有公司的名字或IP? – Jacob

回答

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] 
3

有點粗糙,但會這樣對你的工作:

SELECT ColumnName FROM TableName WHERE ColumnName LIKE '%.%.%.%' 
+0

,這也會帶來''www.My.Company.com'' –

+0

我們沒有任何公司有這麼多的點 - 這應該工作,我會嘗試。非常感謝! – Trinitrotoluene

+0

@ypercube - 是的,但是,問題指出該字段可以有「假公司」或「5.5.5.5」。 –

1

另一種可能性是更換點,並檢查其餘是數字:

SELECT ColumnName 
FROM TableName 
WHERE ISNUMERIC(REPLACE(ColumnName, '.', '')) = 1 

這並不是因爲準確作爲RegEx解決方案,但它足以區分IP地址與公司名稱,並且可能比RegEx或LIKE '%'更快。

相關問題