【问题标题】:SQL Like where the string can be in a randomized orderSQL Like 字符串可以按随机顺序排列
【发布时间】:2016-02-12 15:52:42
【问题描述】:

是的,我知道这是一件很糟糕的事情,全文索引可以解决我的所有问题,但是它在不允许全文索引的 Azure v11 DB 上运行,并且升级不是一个选项时间。

我想要实现的是要输入的搜索字符串,然后将其与字符串列匹配。但是传入的字符串可能会以错误的顺序出现。

举个例子

SELECT value
FROM table
WHERE value like '%This% %Is% %A% %String%'

工作正常,因为搜索字符串是有序的,但有时我被传递的是 '%This% %String% %Is% %A%'

导致;

SELECT value
FROM table
WHERE value like '%This% %String% %Is% %A%'

这将无法返回任何内容。当字符串可以以任何顺序出现时,是否可以应用like?

我发现的任何其他 SO 帖子都归结为使用全文索引,所以很可能我做了一些愚蠢的事情(除了在没有全文索引的情况下尝试这个)或者这是不可能的。

如果有人能提供帮助,我将不胜感激。

快速编辑,因为我认为我没有彻底解释自己;

作为示例,我匹配的数据(仍然使用 '%This% %String% %Is% %A%' 搜索参数作为示例)将是这样的;

  • '这是我要返回的字符串'
  • '这是一个小数'
  • '这个整数是一个'
  • '这是一个小数'
  • '这是字符串'

在这些示例中,我只想返回第一条记录“这是我要返回的字符串”,因此它类似于以下答案,除了它需要使用 AND 完成并且输入会有所不同长度。例如输入可以是

  • '%This% %String% %Is% %A%'
  • '%This% %Is% %A% %String%'
  • '%This% %String%'(将返回两条记录)
  • '%This% %String% %A%'

谢谢,

尼尔

【问题讨论】:

    标签: string tsql azure sql-like


    【解决方案1】:
    WHERE value like '%This% ' 
      AND value like ' %String% '
      AND value like ' %Is% '  
    ...  
    

    但你有点需要这样做

    (value like '%This% ' OR value like ' %This%')  
    

    处理第一个或最后一个

    你真的应该把单词解析成一个单独的表
    不仅更快,而且更准确
    这是任何带有 A 的单词 - 比如 %A%

    【讨论】:

      【解决方案2】:

      您的查询不会很快,但您可以将其重写为:

       value like '%This%' AND value  like '%String%' AND value  like  '%Is%' AND value like '%A%'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-03
        • 2012-11-19
        • 2022-11-18
        • 2013-10-18
        • 2022-12-14
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多