Sql 比较两列直到第一列“.”
我是SQL编程新手,我正在尝试找出如何获得一个报告来显示系统名称和DNS名称中的不匹配。这两列都位于名为节点的表中 系统名为router-1-dc,DNS将是router-1-dc.domain我正在尝试查找与该域不匹配的节点。在域之前,这方面的示例是 系统名称router-1-datacenter和DNS名称router-1-dc.domain我希望这个示例显示在报告页面上 棘手的部分是,一些系统名有.domain,而一些没有 这是我构建的SQL查询,但是它似乎不起作用,因为我也需要它Sql 比较两列直到第一列“.”,sql,algorithm,Sql,Algorithm,我是SQL编程新手,我正在尝试找出如何获得一个报告来显示系统名称和DNS名称中的不匹配。这两列都位于名为节点的表中 系统名为router-1-dc,DNS将是router-1-dc.domain我正在尝试查找与该域不匹配的节点。在域之前,这方面的示例是 系统名称router-1-datacenter和DNS名称router-1-dc.domain我希望这个示例显示在报告页面上 棘手的部分是,一些系统名有.domain,而一些没有 这是我构建的SQL查询,但是它似乎不起作用,因为我也需要它 SEL
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
提前感谢您的帮助试试这个,或者类似的东西我没有数据可以测试它:
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
诀窍是添加一个。到每个字符串的末尾进行计算。如果字符串中已经有句点,则无效,否则将获得整个字符串。您可以通过编辑问题来显示系统名称和DNS名称是否匹配的示例吗?