2014-02-07 55 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 

關鍵是要增加一個「 「。到每個字符串的末尾以進行評估。如果字符串中已經存在一段時間,這沒有任何作用,否則你會得到整個字符串。