【问题标题】:How can I use contains to look for keyword including a space?如何使用 contains 来查找包含空格的关键字?
【发布时间】:2019-05-29 21:19:21
【问题描述】:

我想使用contains 搜索一个左右两边都有一个空格的单词。但它不起作用..

SELECT *
FROM mytable
WHERE Contains(name, ' Hertz ');

任何帮助表示赞赏..

【问题讨论】:

  • 我不太确定您是否可以使用 CONTAINS 来搜索结尾字符。您可以使用通配符 * (CONTAINS(name, '" *"Hertz')) 搜索前缀。您可能需要添加一个附加子句来验证最后一个字符是否为空格。
  • 对于所有回答的人,OP 要求CONTAINS 使用全文索引并且行为不同于LIKE
  • 您可以将 where 条件写为 - WHERE a.name like ' %% ' 检查我的答案。
  • @Janna 你可以在 dba.stackexchange.com 上发帖试试运气

标签: sql sql-server contains


【解决方案1】:

你可以试试这个

SELECT a.name
  FROM mytable a
   WHERE a.name like ' %% '

SELECT a.name
      FROM mytable a
       WHERE a.name like' % '

你可以找到现场演示Demo here

【讨论】:

    【解决方案2】:

    试试这个

    Select * from mytable where replace(name,' ','')='Hertz'
    

    您还可以使用ltrimrtrim 在运行时删除空格以匹配名称值。

    【讨论】:

      【解决方案3】:

      如果您使用 like 运算符,则无需在其之间留空格,如下所示

      select * from mytable where name like '%her%'
      

      如果你想要有空格的数据,你可以像下面这样使用

      select * from mytable where name like '_%hertz%_'
      

      如果我们使用下划线,它将跳过特定的位置元素并搜索数据。

      【讨论】:

        【解决方案4】:

        要搜索包含空格,您需要将表达式用双引号括起来,例如:

        SELECT *
        FROM mytable
        WHERE CONTAINS(name, '" Hertz "');
        

        当然这也可以用 LIKE 来写(虽然在处理大数据集时效率会低一些):

        SELECT *
        FROM mytable
        WHERE name LIKE '% Hertz %');
        

        【讨论】:

          【解决方案5】:

          您可以 LTRIM RTRIM 列并且可以获取值。

          create table #temp
          (
          name varchar(50)
          )
          
          insert into #temp values(' hertz')
          
          insert into #temp values('hertz ')
          
          insert into #temp values('hertzx')
          
          insert into #temp values('hertz')
          
          select * from #temp where LTRIM(RTRIM(name)) like '%hertz%'
          

          如果您想在查询下方的开始或结束使用中搜索它是否有空格。

          select * from #temp where name like ' %'
          
          select * from #temp where name like '% '
          

          【讨论】:

            【解决方案6】:

            你可以试试这个

            SELECT *
            FROM mytable
            WHERE name Like '% Hertz %'
            

            【讨论】:

              【解决方案7】:

              尝试如下。

              SELECT *
              FROM mytable
              WHERE name LIKE '% Hertz %'
              

              Learn more about like operator

              【讨论】:

                【解决方案8】:

                试试这个:

                SELECT *
                FROM mytable
                WHERE name=' Hertz '
                

                如果赫兹只是一个例子,你可以使用:

                SELECT *
                FROM mytable
                WHERE name like ' % '
                

                这将返回所有在第一个和最后一个位置带有空格的名称

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2019-04-28
                  • 1970-01-01
                  • 2021-09-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多