我有一個域名爲公司相當多的表是可以在他們:SQL查詢帶回僅包含數字(具體的IP地址)字段
「假公司」或「5.5.5.5 「
當然上面的數字地址是一個IP地址。
我不知道我該如何去編寫一個選擇查詢,只返回只包含IP地址的行,而不僅僅是文本。有任何想法嗎?
我有一個域名爲公司相當多的表是可以在他們:SQL查詢帶回僅包含數字(具體的IP地址)字段
「假公司」或「5.5.5.5 「
當然上面的數字地址是一個IP地址。
我不知道我該如何去編寫一個選擇查詢,只返回只包含IP地址的行,而不僅僅是文本。有任何想法嗎?
你可以使用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]
有點粗糙,但會這樣對你的工作:
SELECT ColumnName FROM TableName WHERE ColumnName LIKE '%.%.%.%'
,這也會帶來''www.My.Company.com'' –
我們沒有任何公司有這麼多的點 - 這應該工作,我會嘗試。非常感謝! – Trinitrotoluene
@ypercube - 是的,但是,問題指出該字段可以有「假公司」或「5.5.5.5」。 –
另一種可能性是更換點,並檢查其餘是數字:
SELECT ColumnName
FROM TableName
WHERE ISNUMERIC(REPLACE(ColumnName, '.', '')) = 1
這並不是因爲準確作爲RegEx解決方案,但它足以區分IP地址與公司名稱,並且可能比RegEx或LIKE '%'
更快。
哪個數據庫和版本? – Chandu
請記住,IP地址不只是數字,它也是DOT。 –
爲什麼你會在桌上有公司的名字或IP? – Jacob