2014-02-07 121 views
1

我是SQL编程的新手,我试图弄清楚如何获取报告以显示系统名称& DNS名称不匹配。这两列都在一个名为nodes的表中。比较2列直到第1个“。”

系统名称router-1-dc和DNS将是router-1-dc.domain我正在尝试查找与“。”不匹配的节点。之前的域名示例为 系统名称“router-1-datacenter”和DNS名称“router-1-dc.domain”我希望此示例显示在报告页面上。

棘手的部分是一些系统名称有“.domain”,有些则没有。

这是我构建的SQL查询,但它似乎不工作,因为我也需要它。

SELECT N. NodeID, N.Caption, N.SysName, N.DNS, N.IP_Address, N.Device_Type 
FROM (
SELECT Nodes.NodeID, Nodes.Caption, Nodes.SysName, Nodes.DNS, Nodes.Device_Type, Nodes.IP_Address 
FROM Nodes 
WHERE CHARINDEX('.',Nodes.SysName)>0 AND CHARINDEX('.',Nodes.DNS)>0 
) N 
WHERE SUBSTRING(N.SysName, 1, CHARINDEX('.',N.SysName)-1) <> SUBSTRING(N.DNS, 1, CHARINDEX('.',N.DNS)-1) 
AND N.Device_Type = 'UPS' 

ORDER BY 5 ASC, 2 ASC 

在此先感谢您的帮助

+1

可以显示系统名称和DNS名称的例子,这些名称与DNS名称不匹配(通过编辑您的问题)? –

回答

0

试试这个,或者类似的东西(我没有数据来测试它反对):

SELECT N.NodeID, N.Caption, N.SysName, N.DNS, N.IP_Address, N.Device_Type 
from Nodes N 
where left(n.sysname, charindex('.', n.sysname + '.') - 1) 
    <> left(n.dns, charindex('.', n.dns + '.') - 1) 
order by N.IP_Address, N.Caption 

关键是要增加一个“ “。到每个字符串的末尾以进行评估。如果字符串中已经存在一段时间,这没有任何作用,否则你会得到整个字符串。