从列的视图中提取信息

时间:2013-12-04 11:38:19

标签: sql sql-server tsql

我有一个包含Active Directory数据的表。它有3列;即:Machine Name,DistinguishedName和ObjectPath。例如:

a. Machine Name: WKS123BBB
b. Distinguished Name: CN=WKS123BBB,OU=Workstations,OU=GB,OU=Countries,DC=A,DC=B,DC=C,DC=com
c. ObjectPath: LDAP://a.b.c.com,CN=WKS123BBB,OU=Workstations,OU=GB,OU=Countries,DC=A,DC=B,DC=C,DC=com

在域名下面我们有国家OU,在此OU下面我们有国家代码(美国),在国家代码下面我们有3个OU用于工作站。有18个国家。

我正在尝试使用以下列在SQL SERVER中创建一个视图:

a. MachineName
b. OU
c. CountryCode

注意:国家/地区代码下方有3个OU:工作站,Workstations_Indus和WorkstationsDisabled

有人可以帮助您如何从专有名称列中提取国家/地区代码和OU。例如,它应该是:

a. MachineName = WKS123BBB
b. OU = Workstations/Workstations_Indus/WorkstationsDisabled
c. CountryCode = GB

来自CN=WKS123BBB,OU=Workstations,OU=GB,OU=Countries,DC=A,DC=B,DC=C,DC=com

提前致谢

1 个答案:

答案 0 :(得分:1)

这看起来有点可怕但有效。输入字符串必须有CN=XXX,,然后两次OU=XXX,才能生效。

这应该在视图中正常工作,因为它只使用确定性CHARINDEXSUBSTRING函数。

declare @s as varchar(200) = 'CN=WKS123BBB,OU=Workstations,OU=GB,OU=Countries,DC=A,DC=B,DC=C,DC=com'

select SUBSTRING(@s, CHARINDEX('CN=', @s, 1) + 3, CHARINDEX(',', @s, CHARINDEX('CN=', @s, 1) + 2) - 4) as MachineName,
    SUBSTRING(@s, CHARINDEX(',OU=', @s, 1) + 4, CHARINDEX(',', @s, CHARINDEX(',OU=', @s, 1) + 1) - CHARINDEX(',OU=', @s, 1) - 4) as OU,
    SUBSTRING(@s, CHARINDEX(',OU=', @s, CHARINDEX(',OU=', @s, 1) + 1) + 4, CHARINDEX(',', @s, CHARINDEX(',OU=', @s, CHARINDEX(',OU=', @s, 1) + 1) + 1) -CHARINDEX(',OU=', @s, CHARINDEX(',OU=', @s, 1) + 1) - 4) as CountryCode