TSQL查询筛选不含指定非法字符的Active Directory用户名
TSQL筛选不含指定非法字符的Active Directory用户名
方法1:使用LIKE运算符(带转义处理)
TSQL的LIKE不支持原生正则,但可以通过转义字符处理特殊通配符,把所有非法字符纳入匹配范围。针对你列出的非法字符:", \, /, [, ], :, ;, |, =, ,, +, *, ?, <, >,需要注意方括号内的特殊字符处理(]必须放在方括号开头,[需要转义)。
查询语句:
SELECT username FROM userlist WHERE username NOT LIKE '%["\[]/:;|=,+*?<>]%' ESCAPE '\'
ESCAPE '\'指定反斜杠为转义符,确保\[匹配实际的[字符- 方括号开头的
]代表匹配实际的]字符 - 方括号内的其他字符直接表示要匹配的非法字符,
%表示任意位置包含这些字符
方法2:使用PATINDEX函数
PATINDEX返回第一个匹配模式的字符位置,无匹配则返回0,用它判断是否存在非法字符:
SELECT username FROM userlist WHERE PATINDEX('%["\[]/:;|=,+*?<>]%', username) = 0
逻辑与LIKE方法完全一致,只是通过位置判断替代LIKE的匹配逻辑。
验证建议
可以先去掉NOT执行查询,确认能正确筛选出包含非法字符的记录,再验证目标查询的结果是否符合预期。
内容的提问来源于stack exchange,提问作者user13520940
相关产品推荐
相关产品推荐

