比较2列直到第1个“。”

时间:2014-02-07 18:12:33

标签: sql algorithm

我是SQL编程的新手,我正在试图弄清楚如何获得一个报告来显示系统名称和系统名称不匹配DNS名称。这两列都在一个名为nodes的表中。

系统名称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 个答案:

答案 0 :(得分: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

诀窍是添加“。”到每个字符串的末尾以进行评估。如果字符串中已经有一个句点,这没有效果,另外你会得到整个字符串。