我正在开发一个通过MS Studio 2015(C#)和MS SQL Server 2008来表示简单地址簿的数据库。我在我的代码中成功添加了“插入行”和“删除行”方法。所以我想编写一个查询(一个存储过程)来计算每一行中的一些子字符串。
例如,我有一个数据库,其中包含一个名为Contacts的表:
PersonID Name Surname City Phone
1 Alice Karlsson Gotheburg 69-58-12
2 Mark Morrow Stockholm 48-48-48
3 Katherine Karlsson Gotheburg 69-58-16
如果我试图在表格中找到并计算'th',我想得到以下结果:
PersonID Name Surname City Phone Count
3 Katherine Karlsson Gotheburg 69-58-16 2
1 Alice Karlsson Gotheburg 69-58-12 1
所以我不知道该怎么做。我一直在谷歌搜索,但我没有找到令人满意的结果。 stackoverflow.com上的Here我找到了一个返回下一个结果的解决方案:
ColumnName ColumnValue
Contacts.City Gotheburg
Contacts.Name Katherine
Contacts.City Gotheburg
请让我知道如何撰写一个返回预期结果的查询。
全文检索;是预期的结果
UPD:'th'是我正在寻找的子串。所以它应该以同样的方式计算“Agathe”,“th”和“young”。
答案 0 :(得分:1)
你应该尝试以下,
Select
PersonId,
Name,
Surname,
City,
Phone,
sum(count) as count
From
(
select
*,
(Len(name) - LEN(REPLACE(name, 'th', ' ')) +
Len(surname) - LEN(REPLACE(surname, 'th', ' ')) +
Len(city) - LEN(REPLACE(city, 'th', ' '))) as count
from Contacts
where name like '%th%' or surname like '%th%' or city like '%th%'
)T
Group by PersonId, Name, Surname, City, Phone
Order by 6 desc
答案 1 :(得分:0)
您要实现的目标是全文搜索... 请点击此链接.. http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/
创建全文索引
并使用此脚本
select * from yourtable
where freetext (*,'your_search_item')
答案 2 :(得分:0)
试试这种方式
select * from Contacts where Contacts.City like '%th%' or
Contacts.Name like '%th%'
答案 3 :(得分:0)
你需要创建一个表值函数,它逐列循环遍历所有行,以查找带有计数器的子字符串,
在循环内部,您可以使用内置函数来帮助查找CHARINDEX('th',Name+Surname+City,0)
,它给出了文本中子字符串的确切位置......