我使用patindex进行"MD“或"DO”的模式搜索。下面的语句返回3。我是以错误的方式使用它还是有另一种检查条件的方法?
select PATINDEX ('%[MD,DO]%','FHoisegh MD')发布于 2011-09-15 15:29:43
select PATINDEX ('%[MD][DO]%','FHoisegh MD') -- returns 10正如您在问题中所述,它将查找方括号中的5个字符中的任何一个,并在位置3处找到'o‘。例如,
select PATINDEX ('%[MD,DO]%','F,Hoisegh MD') -- returns 2正如@Filip De Vos指出的那样,'%[MD][DO]%'也将与MO相匹敌。我能想到的唯一处理方法就是减去MO的索引
select PATINDEX ('%[MD][DO]%','FHoisegh MO') - PATINDEX('%MO%', 'FHoisegh MO') -- returns 0如果MD和DO是您要搜索的唯一术语,那么这可能就足够了。对于其他任何事情,我会说寻找其他的方法。
发布于 2011-09-16 13:37:33
select T.Value
from (values
(charindex('MD', 'FHoisegh MD')),
(charindex('DO', 'FHoisegh MD'))
) as T(Value)
where T.Value > 0发布于 2011-09-16 16:58:28
通过PATINDEX/CHARINDEX、NULLIF和ISNULL函数的组合,您可以获得所需的结果:
DECLARE @text VARCHAR(100) = 'FHoisegh MXD';
SELECT ISNULL( NULLIF(PATINDEX('%MD%',@text),0), PATINDEX('%DO%',@text) )如果搜索三个或更多值(例如DO / RE / MI),而不是ISNULL函数,可以使用COALESCE函数:
DECLARE @text VARCHAR(100) = 'abcMODOKO';
SELECT COALESCE( NULLIF(PATINDEX('%DO%',@text),0), NULLIF(PATINDEX('%RE%',@text),0), PATINDEX('%MI%',@text) )https://stackoverflow.com/questions/7426490
复制相似问题