Sql server 获取与多列搜索匹配的列名

Sql server 获取与多列搜索匹配的列名,sql-server,tsql,Sql Server,Tsql,对于应用程序,我需要基于多个列显示搜索结果。在多个列中搜索并不是这样,但我还想知道搜索查询与文本匹配的列 想象一下下面的“Blabla”表: --------------------------------------------------------------------------------------- | column1 | column2 | column 3 | ---

对于应用程序,我需要基于多个列显示搜索结果。在多个列中搜索并不是这样,但我还想知道搜索查询与文本匹配的列

想象一下下面的“Blabla”表:

---------------------------------------------------------------------------------------
| column1                |  column2                  | column 3                       |
---------------------------------------------------------------------------------------
| Animals are beautiful  | Some text regarding music | Vague statement about politics |
---------------------------------------------------------------------------------------
| Music is not his thing | Green is a color          | Random gibberish about music   |
--------------------------------------------------------------------------------------- 
搜索“音乐”一词非常简单:

SELECT * FROM Blabla WHERE column1 LIKE '%music%' OR column2 LIKE '%music%' OR column2 LIKE '%music%';

但是SQL中有没有一种方法可以显示匹配的列对于第1行是
column2
,对于第2行是
column1
+
column3

您可以使用
CASE
语句:

SELECT CASE WHEN column1 LIKE '%music%' THEN 'Column1' ELSE '' END AS col1match,
       CASE WHEN column2 LIKE '%music%' THEN 'Column2' ELSE '' END AS col2match,
       CASE WHEN column3 LIKE '%music%' THEN 'Column3' ELSE '' END AS col3match
FROM Blabla
那就是

select
  column1,
  column2, 
  column3,
  case
    when column1 like '%music%' then 'column1'
    when column2 like '%music%' then 'column2'
    when column3 like '%music%' then 'column3'
    else ''
  end as [column]
from Blabla where column1 like '%music%' or column2 like '%music%' or column3 like '%music%'

不确定其实际性能如何。

是的,您可以对指示列使用
大小写表达式

SELECT s.* FROM (
    SELECT t.*,
           CASE WHEN t.column1 LIKE '%music%' THEN 1 ELSE 0 as col_1_ind,
           CASE WHEN t.column2 LIKE '%music%' THEN 1 ELSE 0 as col_2_ind,
           CASE WHEN t.column3 LIKE '%music%' THEN 1 ELSE 0 as col_3_ind
    FROM Blabla t) s
WHERE 1 IN(s.col_1_ind,s.col_2_ind,s.col_3_ind)
试试这个

declare @t table(column1 varchar(100), column2 varchar(100),column3 varchar(100))
insert into @t values
('Animals are beautiful','Some text regarding music','Vague statement about politics')

,('Music is not his thing','Green is a color','Random gibberish about music')

;With CTE as
(
 select column1,column2,column3,ROW_NUMBER()over(order by (select null))rn from @t
)
select case when column1 LIKE '%music%' then 'column1 in row'+ cast(rn as varchar) end
,case when column2 LIKE '%music%' then 'column2 in row'+ cast(rn as varchar) end
,case when column3 LIKE '%music%' then 'column3 in row'+ cast(rn as varchar)
end
from cte  

这不是他想要的吗@Timbiegeleisena接受了你的回答,因为你是第一个。感谢你们的快速反应(还有@Anton Gogolev和@sagi)。现在我想起来了,不知道为什么我没有想到这个。。。