2013-02-15 49 views
1

我不能爲了我的生活,弄清楚我在這裏做錯了什麼。我是否剝奪了所有公司名稱中的經理姓名?

當我運行我們的查詢拉從Active Directory名到SQL Server數據庫,輸出如下:

CN=Jackson\, Andrew,OU=Information Technology,OU=Departments,DC=MO,DC=canton,DC=MA,DC=us. 

我想什麼做的是跳閘everyting關閉,因此輸出看起來更像是這個:

Jackson, Andrew 

以下代碼讓我失望。它一直告訴我,REPLACE需要3個參數。

我似乎無法弄清楚。

REPLACE(LEFT(manager,charindex('','',manager)-1),''CN='','''') as Manager 
+1

什麼查詢看起來像?您應該能夠爲任何特定記錄指定單個字段,而不能獲取整個OU樹。 – 2013-02-15 18:13:10

+0

嗯,這不會給你想要的確切結果,但至少會修復你當前的查詢。對每個字符串('''')使用兩個引號,您應該使用一個:'SELECT REPLACE(LEFT(Manager,charindex(',',Manager)-1),'CN =','')as經理' – Lamak 2013-02-15 18:16:39

+0

我指定個別字段。正如@Jeff所說,我也不熟悉Active Directory。所以,如果有人知道經理人的領域,我很高興使用它。至於你的評論傑夫,這應該只是定期查詢。我正在使用OpenQuery。然而,我發佈的示例查詢是針對外部部分,應該只是定期查詢如何使用REPLACE(LEFT ...(CharIndex))。我確信有更好的方式來完成我所追求的。 – 2013-02-15 18:20:14

回答

4
REPLACE(SUBSTRING(<query output>,4,CHARINDEX(',OU=',<query output>) - 4),'\','') 

該解決方案使大量的有關數據的假設,但它可能爲你工作。

+0

什麼是查詢輸出? – 2013-02-15 18:28:03

+0

'<查詢輸出>'是您的AD查詢的輸出:'CN = Jackson \,Andrew,OU =信息技術,OU =部門,DC = MO,DC =州,DC = MA,DC = us。' – supergrady 2013-02-15 18:29:31

+0

謝謝。您的解決方案非常完美 – 2013-02-15 18:31:57

0

正如馬克在評論中寫道的,可能有更好的方式來做你的查詢。我沒有AD的經驗,所以我不會去那裏。

關於REPLACE,雖然看起來問題是''CN=''。這些不應該是單引號嗎?換句話說,它應該是'CN='

+0

@bobs是對的。這不僅僅是'''CN =''',它是所有的引號。 – 2013-02-15 18:21:55

2

關於現有查詢的問題,看起來所有雙單引號應該只是單個單引號。

select REPLACE(LEFT(manager,charindex(',',manager)-1),'CN=','') as Manager 
0

更換\,與一個或幾個字符的組合是不太可能出現的字符串,然後分割上,,然後打開特殊字符/組合成一個,

REPLACE( 
    REPLACE(
    LEFT(
     REPLACE(manager, ''\,'', CHAR(127)), 
     charindex('','',REPLACE(manager, ''\,'', CHAR(127)))-1), 
    ''CN='', 
    '''' 
) , CHAR(127), '','') as Manager 

SQL Fiddle Demo