我patindex用于"MD"或"DO"的模式搜索.以下语句返回3.我是以错误的方式使用它还是有另一种检查条件的方法?
select PATINDEX ('%[MD,DO]%','FHoisegh MD')
Run Code Online (Sandbox Code Playgroud)
select PATINDEX ('%[MD][DO]%','FHoisegh MD') -- returns 10
Run Code Online (Sandbox Code Playgroud)
正如您在问题中所说,它正在查找方括号之间的 5 个字符中的任何一个,并在位置 3 处找到“o”。例如,
select PATINDEX ('%[MD,DO]%','F,Hoisegh MD') -- returns 2
Run Code Online (Sandbox Code Playgroud)
正如@Filip De Vos 指出的,'%[MD][DO]%'也将匹配MO。我能想到的处理这个问题的唯一方法是减去索引MO:
select PATINDEX ('%[MD][DO]%','FHoisegh MO') - PATINDEX('%MO%', 'FHoisegh MO') -- returns 0
Run Code Online (Sandbox Code Playgroud)
如果MD和DO是您要搜索的唯一术语,这可能就足够了。对于其他事情,我会说寻找其他方法来做到这一点。