【问题标题】:SQL: Search the text that contains in arraysSQL:搜索包含在数组中的文本
【发布时间】:2014-10-21 19:32:21
【问题描述】:

我有一个选择查询进行搜索,我的@SearchText 可以由几个单词组成

我想将单词分成一个数组并选择某些文本是否包含我的搜索文本

查询:

ALTER PROCEDURE [dbo].[myStoreProcedure]
@SearchText varchar(100)
AS 
BEGIN
SELECT * FROM t0 
        WHERE 
ISNULL(@SearchText, '')='' OR t0.title LIKE '%' +@SearchText + '%')

现在我想要: 如果我搜索字符串 'adam smith' 或 'smith adam' 结果必须相同

如何将我的 @SearchText 转换为数组并从 table-t0 中提取行,其中标题包含我的 @SearchText 以任意顺序

【问题讨论】:

  • SQL 没有“数组”。 SQL 有带行的表。因此,您需要拆开您的@SearchText 并将每个单词放入临时表的单独行中,然后在某些数据库列的值中搜索该临时表内容的任意组合。话虽如此,使用 SQL Server 的全文搜索功能可能会更好。

标签: sql-server arrays tsql


【解决方案1】:

尝试使用 CONTAINS 运算符:

ALTER PROCEDURE [dbo].[myStoreProcedure]
@SearchText varchar(100)
AS 
BEGIN
SELECT * FROM t0 
        WHERE 
ISNULL(@SearchText, '')='' OR CONTAINS(t0.title,@SearchText)

您可以使用CONTAINS 运算符进行更通用的搜索。

【讨论】:

  • 使用包含需要用'OR'分割单词才能正常工作
【解决方案2】:

当我传输参数时需要删除双空格并在单词“OR”之间添加这样的:

searchText = searchText.Replace("  ", " ").Replace(" ", " OR ");
command.Parameters.Add("@SearchText", SqlDbType.VarChar, 200).Value = searchText;

在 SQL 中:

((@SearchText = '""') OR CONTAINS(t0.title, @SearchText))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 2013-07-16
    相关资源
    最近更新 更多