2016-01-13 37 views
0

我正在使用以下查詢來填充某些數據。從列「查詢表達式」有沒有辦法刪除N'Domain \SQL查詢修剪列?

左側的任何文本基本上我只想看到N'Domain \後列中的查詢表達式「Query Expression」不確定這個怎麼做。

SELECT 
    v_DeploymentSummary.SoftwareName, 
    v_DeploymentSummary.CollectionName, 
    v_CollectionRuleQuery.QueryExpression 
FROM 
v_DeploymentSummary 
INNER JOIN v_CollectionRuleQuery 
ON v_DeploymentSummary.CollectionID = v_CollectionRuleQuery.CollectionID 
+1

請用你正在使用的數據庫標記你的問題。另外,請提供樣本數據和期望的結果。 –

+0

你可以發佈樣本數據嗎? – HoneyBadger

+2

有很多方法可以做到這一點。對於sql server,patindex()和right()的組合應該完成工作。 –

回答

1

至少爲SQL Server:

SUBSTRING([v_CollectionRuleQuery.QueryExpression], CHARINDEX('N''Domain\', [v_CollectionRuleQuery.QueryExpression]) + 9, LEN([v_CollectionRuleQuery.QueryExpression]) 

試試看吧。

我不明白,如果你想在你的字符串中包括N'Domain \,如果是這種情況,只需刪除+9。

在我的理解,你想是這樣的:

SELECT 
    v_DeploymentSummary.SoftwareName, 
    v_DeploymentSummary.CollectionName, 
    SUBSTRING([v_CollectionRuleQuery.QueryExpression], CHARINDEX('N''Domain\', [v_CollectionRuleQuery.QueryExpression]) + 9, LEN([v_CollectionRuleQuery.QueryExpression]) 
FROM 
v_DeploymentSummary 
INNER JOIN v_CollectionRuleQuery 
ON v_DeploymentSummary.CollectionID = v_CollectionRuleQuery.CollectionID 
+0

謝謝,最後我會在哪裏將它放入我的查詢中? – user1342164

+0

我編輯了答案,向你展示了我的理解中的最後一個查詢,如果你期望在你的最終查詢中包含N'domain \,只需刪除+9,這是子字符串的偏移量,不包括那個。 – alan07sl

+0

謝謝,我不得不從子字符串中刪除[],但現在它說我在「FROM」有語法錯誤? – user1342164

1

在SQL Server中,你可以使用stuff()用於此目的:

SELECT ds.SoftwareName, ds.CollectionName, 
     STUFF(crq.QueryExpression, 1, 
      CHARINDEX('Domain\', rq.QueryExpression) + LEN('Domain\') - 1, 
      '') 
FROM v_DeploymentSummary ds INNER JOIN 
    v_CollectionRuleQuery crq 
    ON ds.CollectionID = crq.CollectionID; 

的使用注意事項表別名使查詢更容易寫和讀。

+0

似乎你正在刪除一個額外的字符 –

1

試試這個,對於QueryExpression無文本N'Domain它不會改變價值觀和不需要N'Domain是第一個文本:

SELECT 
    ds.SoftwareName, 
    ds.CollectionName, 
    crq.QueryExpression 
    STUFF(crq.QueryExpression, 1, charindex('N''Domain\', 
    REPLICATE('w', LEN('N''Domain\')-1) + crq.QueryExpression), '') 
FROM 
    v_DeploymentSummary ds 
JOIN 
    v_CollectionRuleQuery crq 
ON ds.CollectionID = crq.CollectionID 

例子:

SELECT 
    STUFF(x, 1, charindex('N''Domain\', 
    replicate('w', LEN('N''Domain\')-1) + x), '') 
FROM (values('N''Domain\xxx'),('N''Doma'),('xxN''Domain\yyy')) x(x) 

結果:

xxx 
N'Doma 
yyy