如何通过SQL计算连续的一些子字符串?

时间:2016-02-15 09:53:03

标签: sql sql-server

我正在开发一个通过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”。

4 个答案:

答案 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)

等文本

,它给出了文本中子字符串的确切位置......