2016-11-15 65 views
0

我从通过IP地址与主机名混合发送的其中一个脚本获取输出,所以我想要做的是设置一个查询来区分IP主机名称,以便我可以尝试在稍后解决使用Powershell(或其他)。我的问题是,当我的数据看起来如下所示时,我怎么才能从该行中选择IP地址(只是为了让问题得到解决)。从SQL Server列中选择IP地址

host123.na.root.net 
host123.na.root.net 
123.123.123.123 
11.22.123.23 
host789 
host789 
123.123.123.123 
111.23.23.132 

我会想回去将只是

11.22.123.23 
123.123.123.123 
111.23.23.132 

编辑我已经看到了一些事情表明PARSENAME,但我不知道如何将与FQDN是工作在那里。

+0

请与您正在使用的数据库标记您的问题。 –

回答

2

基础上参考parsename(),我假设的SQL Server:

where ip like '%.%.%.%' and  -- has three periods 
     ip not like '%.%.%.%.%' and -- does not have four periods 
     ip not like '%[^0-9.]%'  -- has only numbers and periods 

在几乎任何其他数据库,你可以使用正则表达式。

+0

谢谢,你的MSSQL正确,就像一个魅力! – Wingman1487

1

我建议是这样的:

SELECT DISTINCT address 
FROM your_table 
WHERE ISNUMERIC(REPLACE(address,'.',''))=1 
+0

我敢打赌,这可以在其他数据库中工作,尽管在MSSQL中它返回一个INT而不是BOOLEAN,所以它返回一个错误。 – Wingman1487

+0

您可能会错过最后的= 1部分。 ISNUMERIC如果是数字则返回1,如果不是则返回0 – LordBaconPants

+0

小心,ISNUMERIC可以返回有趣的结果。尝试1e或仅$。如有可能(SQL 2012+)使用TRY_CONVERT – scsimon