选择用户ID列仅指定字符串的行

时间:2019-07-07 15:22:24

标签: sql ms-access sharepoint

我已使用PowerShell在SharePoint场中提取了具有完全控制访问权限的所有用户的电子表格。

现在,我正在尝试从该列表中获取仅SP管理员为独占所有者的网站列表。我将提取的电子表格加载到Access中,并编写查询以生成各种报告。

一个SP站点的所有用户ID存储在一个名为UserID的单元格中,并用分号User1; User2;等隔开。

SiteName Url                UserID                
-------- ---------------    ----------------             
Site1    https://test.com   User1;User2;User3;
Site2    https://test2.com  User1;User3;User5;...;User50;

我有一个带有UserID列的表。

例如:User1、2和3是SP管理员

Row 1 has UserID column values: "User1; User2; User3"
Row 2: "User2; User3;"
Row 3: "User1; User4; .... ;User50;"
Row 4: "User1; User2; User4;... ;User25;"
Row 5: "User3;"

我正在尝试设计一个查询,其中该单元格中仅包含User1User2User3的行。这基本上意味着只有行1,行2和行5返回结果。 Row3Row4应该返回结果,因为其单元格中除User123以外的用户

使用LIKE对此无济于事,因为它返回找到这些用户之一的每一行。我无法使用NOT LIKE来排除剩余的用户,因为在具有完全控制访问权限的单元格中,有很多行列出了30个以上的用户。

2 个答案:

答案 0 :(得分:1)

UserID列中的空格(如果有的话)使对该列的字符串操作更加复杂。
想法是用空字符串替换'User1''User2''User3',然后删除所有分号和所有空格。
如果剩下的内容是length = 0,则此行仅包含'User1''User2''User3'或它们的组合:

select * from tablename
where
len(replace(replace(replace(replace(replace(userid, 'User1', ''), 'User2', ''), 'User3', ''), ';',''), ' ', '')) = 0

答案 1 :(得分:0)

如果您能够获取不是不是 SP管理员的所有UserID的集合,则可以使用如下查询来获取所需的行:

select t1.* 
from YourTable t1 left join NotSPAdmins t2 on t1.UserID like '*' & t2.UserID & '*'
where t2.UserID is null