簡體   English   中英

SQL Server在文本列中搜索確切的短語

[英]SQL Server searching a column of text for an exact phrase

我正在使用SQL Server,並且試圖弄清楚如何在dbo.tickets中的列tags中進行搜索,以及如何搜索諸如lwr_tickets的短語。

現在,我有一個查詢,它將按日期獲取所有用戶的票證並在其中顯示名稱。 我試圖弄清楚如何查看在哪個分支的票。

因此,總票數為lwr_tickets 數據庫中的tags字段名具有一長串的標簽名,每個票證都用逗號分隔。 因此,我試圖弄清楚如何編寫遍歷tag列的內容,然后只返回其中包含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)標准,這就是為什么要使用連字符。
  • 您幾乎沒有什么可以改善性能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM