首页 > 解决方案 > SQL Server 在文本列中搜索确切的短语

问题描述

我正在使用 SQL Server,我试图弄清楚如何搜索tagsdbo.tickets 中的列并搜索诸如lwr_tickets.

现在我有一个查询,它将按日期获取所有用户票并在那里显示名称。我试图弄清楚如何查看哪个分店的票。

所以票的总数是lwr_tickets。数据库中的tagsfieldname 有一个很长的标签名称列表,每个标签用逗号分隔。所以我试图弄清楚如何编写通过标签列的内容并返回其中包含的lwr_tickets内容以获得该分支的总数。

任何帮助将不胜感激。

这找到所有门票:

select
    u.Id,
    u.Name,
    t.submitter_id,
    COUNT(*) as numberOfTickets
from Users as u 
join Tickets as t on t.submitter_id = u.Id and t.created_at between '2017/11/01' and '2018/08/23'
group by u.Id, u.Name, t.submitter_id 

现在尝试添加将搜索的位置lwr_tickets

试过:

select
    u.Id,
    u.Name,
    t.submitter_id,
    COUNT(*) as numberOfTickets
from Users as u 
join Tickets as t on t.submitter_id = u.Id and t.created_at between '2017/11/01' and '2018/08/23'
group by u.Id, u.Name, t.submitter_id 
where t.tags = "lwr_tickets"

标签: sqlsql-servertsql

解决方案


逗号分隔的列表不应存储在字符串中。这不是关系数据库的工作方式。有很多原因。您的数据应该有一个ticketTags表格,每张票和每个标签都有一行。

有时,我们被其他人困住了,真的,真的,真的,真的很糟糕的设计决策。您可以like为此使用:

select u.Id, u.Name, t.submitter_id,
       count(*) as numberOfTickets
from Users u join
     Tickets t
     on t.submitter_id = u.Id 
where t.created_at between '2017-11-01' and '2018-08-23' and
      ',' + t.tags + ',' like '%,' + 'lwr_tickets' + ',%'
group by u.Id, u.Name, t.submitter_id;

笔记:

  • where之后from和之前group by
  • 字符串在 SQL 中通常由单引号分隔(特别是在 SQL Server 中)。
  • 连字符是日期的(ISO)标准,这就是我使用它的原因。
  • 您几乎无法提高性能。

推荐阅读