首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Patindex()函数的用法

Patindex()函数的用法
EN

Stack Overflow用户
提问于 2011-09-15 14:02:17
回答 3查看 16.9K关注 0票数 6

我使用patindex进行"MD“或"DO”的模式搜索。下面的语句返回3。我是以错误的方式使用它还是有另一种检查条件的方法?

代码语言:javascript
复制
select PATINDEX ('%[MD,DO]%','FHoisegh MD')
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-15 15:29:43

代码语言:javascript
复制
select PATINDEX ('%[MD][DO]%','FHoisegh MD')  -- returns 10

正如您在问题中所述,它将查找方括号中的5个字符中的任何一个,并在位置3处找到'o‘。例如,

代码语言:javascript
复制
select PATINDEX ('%[MD,DO]%','F,Hoisegh MD')  -- returns 2

正如@Filip De Vos指出的那样,'%[MD][DO]%'也将与MO相匹敌。我能想到的唯一处理方法就是减去MO的索引

代码语言:javascript
复制
select PATINDEX ('%[MD][DO]%','FHoisegh MO') - PATINDEX('%MO%', 'FHoisegh MO') -- returns 0

如果MDDO是您要搜索的唯一术语,那么这可能就足够了。对于其他任何事情,我会说寻找其他的方法。

票数 2
EN

Stack Overflow用户

发布于 2011-09-16 13:37:33

代码语言:javascript
复制
select T.Value
from (values
        (charindex('MD', 'FHoisegh MD')),
        (charindex('DO', 'FHoisegh MD'))
     ) as T(Value)
where T.Value > 0
票数 3
EN

Stack Overflow用户

发布于 2011-09-16 16:58:28

通过PATINDEX/CHARINDEX、NULLIF和ISNULL函数的组合,您可以获得所需的结果:

代码语言:javascript
复制
DECLARE @text VARCHAR(100) = 'FHoisegh MXD';
SELECT ISNULL( NULLIF(PATINDEX('%MD%',@text),0), PATINDEX('%DO%',@text) )

如果搜索三个或更多值(例如DO / RE / MI),而不是ISNULL函数,可以使用COALESCE函数:

代码语言:javascript
复制
DECLARE @text VARCHAR(100) = 'abcMODOKO';
SELECT COALESCE( NULLIF(PATINDEX('%DO%',@text),0), NULLIF(PATINDEX('%RE%',@text),0), PATINDEX('%MI%',@text) )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7426490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档