首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server中查找列中的第一个匹配字符串

在SQL Server中查找列中的第一个匹配字符串
EN

Stack Overflow用户
提问于 2012-11-05 14:30:35
回答 5查看 147关注 0票数 2

我有一个表,如下:

代码语言:javascript
复制
TABLE1

No  Description
1   Hello Hai Hello
2   Good Bad Good
3   Hello Good Hai
4   Hai Hello Bad
5   Hello Hello Hello

现在,如果我运行以下查询:

代码语言:javascript
复制
Select * 
from TABLE1 
where Description like '%Hai%' 
   OR  Description like '%Hello%' 
   OR Description like '%Good%'

我希望结果如下所示(通过添加额外的列"FIRST MATCHED WORD"):

代码语言:javascript
复制
No  Description     First Matched Word
1   Hello Hai Hello     Hai
2   Good Bad Good       Good
3   Hello Good Hai      Hai
4   Hai Hello Bad       Hai
5   Hello Hello Hello   Hello

我的意图是找出第一个匹配的单词取决于我们的查询。请帮帮我。

EN

回答 5

Stack Overflow用户

发布于 2012-11-05 14:45:23

您可以通过以下方式在SELECT查询中使用CASE statement

代码语言:javascript
复制
Select No,Description, 
  CASE 
      WHEN Description like '%Hai%' THEN 'Hai' 
      WHEN Description like '%Hello%' THEN 'Hello'
      WHEN Description like '%Good%' THEN 'Good'
   END 
from TABLE1 
where Description like '%Hai%' 
   OR  Description like '%Hello%' 
   OR Description like '%Good%'

请参阅

Case Statement返回计算结果为TRUE的第一个布尔表达式的结果。

票数 3
EN

Stack Overflow用户

发布于 2012-11-05 15:01:23

试试这个:

如果你想添加更多的词来匹配,你只需要将这个词添加到具有排名的优先级表中。如果您有大量要匹配的单词,则可以将优先级表作为永久表

代码语言:javascript
复制
with precedence as(
select 1 rnk, 'Hai' as word union all
select 2 rnk, 'Hello' union all
select 3 rnk, 'Good' ),
cte as 
    (select * 
     from Table1
     join precedence
     on  [Description] like '%'+word+'%' ),
cte1 as(select [No],[Description],word,
               ROW_NUMBER() over (partition by [No] order by rnk) as row_num 
        from cte)
select [No],[Description],word from cte1 where row_num=1

SQL Fiddle demo

票数 2
EN

Stack Overflow用户

发布于 2012-11-05 15:18:40

试试这个:

代码语言:javascript
复制
select *,'Hai' as 'First Matched Word' from Table1 where [Description] like '%Hai%'
union
select *,'Hello' as 'First Matched Word' from Table1 where [Description] like '%hello%' 
and [No] not in(select [No] from Table1 where [Description] like '%Hai%')
union
select *,'Good' as 'First Matched Word' from Table1 where [Description] like '%Good%' 
and [No] not in(select [No] from Table1 where [Description] like '%hello%' 
or [Description] like '%Hai%'
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13227030

复制
相关文章

相似问题

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