2013-02-15 37 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