【问题标题】:Searching for words using phrase SQL Server Query使用短语 SQL Server Query 搜索单词
【发布时间】:2017-03-20 23:49:33
【问题描述】:

我想创建一个查询,它能够在我的“标准”中使用短语中的单词(就像 google 一样)

示例: 我的短语:'Foo Bar Test'

我的数据库表:

|栏目|

'嗨吧'

'测试栏'

'你好'

'这里什么都没有'

'又发疯了'

我正在等待的结果:

|栏目|

'嗨吧'

'测试栏'

'你好'

'再次发疯'

【问题讨论】:

  • 查找 SQL Server 的全文功能。
  • 您可以使用“LIKE”运算符。例如:WHERE COLUMN LIKE '%Foo%' OR COLUMN LIKE '%Bar%' OR COLUMN LIKE '%Test%'
  • 您想只搜索表格中的一列还是搜索所有列?

标签: sql sql-server database sql-server-2008 select


【解决方案1】:

您可以在 Sql server 中使用FULL Text Index 执行此操作。也可以使用拆分字符串功能实现

Declare @str varchar(500) = 'Foo Bar Test'

SELECT distinct tc.*
FROM   (VALUES ('Hi Bar' ),
               ('Test Bar' ),
               ('Hi Foo' ),
               ('Nothing here' ),
               ('Foo again' ) ) tc (columnss)
       JOIN [dbo].[Delimitedsplit8k](@str, ' ') f
         ON columnss LIKE '%' + f.Item + '%' 

要创建拆分字符串函数,请查看此链接http://www.sqlservercentral.com/articles/Tally+Table/72993/

【讨论】:

  • 那不是一个“和”条件,而不是 OP 想要的吗?
  • @sagi - 是的,完全看过了
【解决方案2】:

任何拆分/解析功能都可以提供帮助

Declare @YourTable table (YourFieldName varchar(100))
Insert Into @YourTable values
('Hi Bar'),
('Test Ba'),
('Hi Foo'),
('Nothing here'),
('Foo again')

Declare @SearchString varchar(max) = 'Foo Bar Test'

Select A.*
 From  @YourTable A
 Join  [dbo].[udf-Str-Parse](@SearchString,' ') B
   on  Charindex(RetVal,YourFieldName)>0

返回

YourFieldName
Hi Foo
Foo again
Hi Bar
Test Ba

UDF(如果需要)

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table 
As
Return (  
    Select RetSeq = Row_Number() over (Order By (Select null))
          ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
    From (Select x = Cast('<x>'+ Replace(@String,@Delimiter,'</x><x>')+'</x>' as xml).query('.')) as A 
    Cross Apply x.nodes('x') AS B(i)
);
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2010-09-14
    • 1970-01-01
    • 2015-02-05
    • 2012-02-17
    • 2015-08-28
    相关资源
    最近更新 更多