【问题标题】:CONTAINS sql function doesn't match underscores包含 sql 函数与下划线不匹配
【发布时间】:2011-01-04 13:38:45
【问题描述】:

我有一些表 'TableName',例如 Id,Name:

1 | something
2 | _something
3 | something like that
4 | some_thing
5 | ...

我想从该表中获取名称包含“一些”的所有行。 我有两种方法:

SELECT * FROM TableName WHERE Name like '%some%'

结果是表格:

1 | something
2 | _something
3 | something like that
4 | some_thing

但是如果我使用 CONTAINS 函数

SELECT * FROM TableName WHERE CONTAINS(Name,'"*some*"')

我只得到

1 | something
3 | something like that

我应该怎么做才能使 CONTAINS 功能正常工作?

【问题讨论】:

    标签: sql contains


    【解决方案1】:

    我上次查看(诚然是 SQL Server 2000)CONTAINS 不支持单词开头的通配符匹配,只支持结尾。此外,您可能需要检查噪声文件以查看“_”字符是否被忽略。

    另见

    How do you get leading wildcard full-text searches to work in SQL Server?

    【讨论】:

      【解决方案2】:

      http://doc.ddart.net/mssql/sql70/ca-co_15.htm

      如果你读了这篇文章,你会看到 * 表示前缀,这表示单词必须以 this 开头,但 like 表示单词包含关键短语。

      最好的问候, 约旦

      【讨论】:

      • 我知道前缀 * 代表什么,我用它来获取字符串,例如“something like that”或“this is something”。我对如何使用 CONTAINS 函数获取带下划线的字符串很感兴趣。
      • 那么你必须再添加一个包含下划线的父函数 SELECT * FROM TableName WHERE CONTAINS(Name,'"some"') OR CONTAINS(Name,'"_some"')
      • 如果我使用它,我可以得到像'something','_something'这样的字符串,但不能得到'some_thing'。我想得到所有带有单词'some'的字符串,所以你的方式不是灵丹妙药。
      • 使用 like 操作符或只是将 OR CONTAINS(Name,'"some_"') 添加到我更喜欢使用 like 的先前表达式
      • 谢谢,我试了一下,但 CONTAINS(Name,'"_some"') 不匹配 'this_something' 字符串,只有 '_something'。一方面 CONTAINS 的工作速度比 Like 语句快,另一方面 CONTAINS 与我希望的字符串不匹配,所以你是对的,我最好使用 Like。
      【解决方案3】:

      试试这个:

      SELECT * FROM TableName WHERE CONTAINS(Name,'some')
      

      【讨论】:

        猜你喜欢
        • 2023-01-27
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 2021-09-26
        • 2015-07-21
        • 2013-04-10
        • 2014-01-24
        • 1970-01-01
        相关资源
        最近更新 更多