全文搜索多列sql server

时间:2016-07-13 16:18:09

标签: sql sql-server

我有下表

static unsigned char UART_write_shadow;

void UART_transmit_write(unsigned char x) {
  *UART_transmit_register_address = x;
  UART_write_shadow = x;
}

unsigned char UART_transmit_read(void) {
  return UART_write_shadow;
}

我想通过输入名字和姓氏的前几个字符来搜索作者。

Id  Author
1   Alexander Mccall Smith
2   Ernest Hemingway
3   Giacomo Leopardi
4   Henry David Thoreau
5   Mary Higgins Clark
6   Rabindranath Tagore
7   Thomas Pynchon
8   Zora Neale Hurston
9   William S. Burroughs
10  Virginia Woolf
11  William tell

iam tel l

eg: Search Text: Will tel
Then the search result show the following result

iam S. Burrou ghs

例如:搜索文本:将     然后搜索结果显示以下结果

iam S. Burroughs 我告诉

在sql server中实现此目的的有效方法是什么?

2 个答案:

答案 0 :(得分:5)

正如您所提到的,可以使用全文搜索来实现。您必须创建FTS目录,然后在表和列上建立索引。您在标题'列'中说明了这一点。但我只在您的示例中看到一个表列,因此我将使用它创建查询。

-- example 1 searching on Will and Tel
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"Will*" AND "tel*"')

-- example 2 searching on Will and Burrou
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"will*" AND "Burrou*"')

-- example 3 searching on Will
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"will*"')

有待进一步参考,请参阅

答案 1 :(得分:0)

随着表格大小的增长,效率低于@ Igor的答案,但您也可以使用Like语句。

  

在WHERE子句中使用LIKE运算符来搜索列中的指定模式。

-- example 1 searching on Will and Tel
SELECT Id, Author
FROM Authors
WHERE Author Like('Will%Tel%')

-- example 2 searching on Will and Burrou
SELECT Id, Author
FROM Authors
WHERE Author Like('Will%Burrou%')

-- example 3 searching on Will
SELECT Id, Author
FROM Authors
WHERE Author Like('Will%')

缺点:它比contains语句慢。您需要在要搜索的任何其他关键字后添加%符号。

优点:在较小(<1000)行表的情况下,可以比包含语句更快。