繁体   English   中英

如何识别条件部分与SQL查询匹配?

[英]How to identify the part of the condition that matched in a SQL query?

我正在使用t-sql,但我认为我的问题更笼统。

在我的应用中,用户尝试获取给定部分名称的匹配条目。 我的查询尝试查找与名字,姓氏和电子邮件匹配的内容:

...
WHERE FirstName LIKE ('%' + @name + '%')
   OR LastName LIKE ('%' + @name + '%')
   OR EMail LIKE ('%' + @name + '%')

我想知道查询本身是否有一种简单的方法来确定条件的哪一部分实际成功。 问候。

SELECT 'FirstName ', ... FROM ... WHERE FirstName LIKE ('%' + @name + '%')
UNION 
SELECT 'LastName ', ... FROM ... WHERE LastName LIKE ('%' + @name + '%')
UNION 
SELECT 'EMail ', ... FROM ... WHERE EMail LIKE ('%' + @name + '%')

CASE .. WHEN

SELECT 
CASE 
WHEN FirstName LIKE ('%' + @name + '%') THEN 'FirstName'
WHEN LastName LIKE ('%' + @name + '%') THEN 'LastName'
WHEN EMail LIKE ('%' + @name + '%') THEN 'EMail ', *
FROM ... WHERE ...

UPD删除重复项并获取所有匹配项

;WITH x AS
(
    SELECT [M] = 1, ... FROM ... WHERE FirstName LIKE ('%' + @name + '%')
    UNION ALL
    SELECT [M] = 2, ... FROM ... WHERE LastName LIKE ('%' + @name + '%')
    UNION ALL
    SELECT [M] = 4, ... FROM ... WHERE EMail LIKE ('%' + @name + '%')
),
(
    SELECT FirstName, LastName , EMail,  [SM] = SUM(M) 
    FROM x
    GROUP BY FirstName, LastName , EMail
) 
SELECT FirstName, LastName , EMail,
IIF([SM]&1<>0, 'FirstName;','') + 
IIF([SM]&2<>0, 'LastName;','') + 
IIF([SM]&4<>0, 'EMail;','') as [Match]
FROM x

我会这样做的;

select t.*
from (select t.*,
             ( (case when FirstName LIKE ('%' + @name + '%') then 'FirstName'' else '' end) +
               (case when LastName LIKE ('%' + @name + '%') then 'LastName'' else '' end) +
               (case when Email LIKE ('%' + @name + '%') then 'Email'' else '' end)
             ) as matches         
      from t
     ) t
where matches <> '';

这考虑到可能会匹配多个列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM