Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较两列直到第一列“.”_Sql_Algorithm - Fatal编程技术网

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

我是SQL编程新手,我正在尝试找出如何获得一个报告来显示系统名称和DNS名称中的不匹配。这两列都位于名为节点的表中

系统名为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

提前感谢您的帮助

试试这个,或者类似的东西我没有数据可以测试它:

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名称是否匹配的示例吗?