sql - SQL Server 在文本列中搜索确切的短语
问题描述
我正在使用 SQL Server,我试图弄清楚如何搜索tags
dbo.tickets 中的列并搜索诸如lwr_tickets
.
现在我有一个查询,它将按日期获取所有用户票并在那里显示名称。我试图弄清楚如何查看哪个分店的票。
所以票的总数是lwr_tickets
。数据库中的tags
fieldname 有一个很长的标签名称列表,每个标签用逗号分隔。所以我试图弄清楚如何编写通过标签列的内容并返回其中包含的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"
解决方案
逗号分隔的列表不应存储在字符串中。这不是关系数据库的工作方式。有很多原因。您的数据应该有一个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)标准,这就是我使用它的原因。
- 您几乎无法提高性能。
推荐阅读
- javascript - 在 React 中折叠所有打开的容器
- java - SQL Server 上的加密数据将在 oracle 服务器上解密,而无需从 Oracle 将链接服务器连接回 SQL Server
- python - 按组将 DataFrame 转换为列表
- bootstrap-4 - 更改主题原色
- javascript - 为什么类的值不显示在 HTML 文件中
- fortran - Fortran 90 中的生日概率程序
- ios - 加载一个空的 url 需要多少数据?
- azure - 如何从托管为 azure web 应用程序的 web api core 3.1 响应中删除服务器信息标头?
- docker - Docker 无法从 CLI 登录
- javascript - 对计算器进行编码无法将值附加到显示器