【问题标题】:SQL Server 2012 query string containing slash包含斜杠的 SQL Server 2012 查询字符串
【发布时间】:2015-05-19 23:54:16
【问题描述】:

我已经在整个互联网和 stackoverflow 上寻找这个问题的答案,但似乎找不到任何可以回答它的东西,所以这里......

是否需要对正斜杠 (/) 进行任何特殊处理才能将其包含在搜索查询中?

场景:我有一个包含正在搜索的字符串的查询,其中包含正斜杠。搜索词是特定项目的维度,因此它必须包含斜线以表示分数。我试过用反斜杠转义它,但这不起作用。查询如下:

SELECT * FROM ITEMDATA WHERE CONTAINS(dimensions, '3/8')

此查询返回 0 个结果。

要搜索的数据示例:

•间距:3/8" •轨距:0.050

我还需要在搜索短语中使用双引号来指定单位,但这是另一个问题。

有什么建议吗?

【问题讨论】:

  • 恐怕SQL server全文只有索引字母。不确定 2012 年是否改变了这一点。

标签: sql sql-server-2012 full-text-search


【解决方案1】:

如下所示,您可以在LIKE 表达式中使用“/”而无需任何技巧:

create table foo(a int, b varchar(32))
go

insert into foo select 1, 'for 3/8 inch';
go

select * from foo where b like '%3/8%';
go

这将导致找到单行。

【讨论】:

    【解决方案2】:

    如果我们需要在sql表的列中搜索特定的字符串,我们需要使用LIKE命令,这样我们就可以以各种方式使用它。 1. 返回具有维度列值的结果包含字符串 3/8

    'SELECT * FROM ITEMDATA WHERE dimensions LIKE '%3/8%';`
    
    1. 返回具有维度列值的结果严格以字符串 3/8 开头

    SELECT * FROM ITEMDATA WHERE dimensions LIKE '3/8%';

    1. 返回维度列值严格以字符串 3/8 结尾的结果。

    SELECT * FROM ITEMDATA WHERE dimensions LIKE '3/8%';

    【讨论】:

      【解决方案3】:

      对全文禁用 STOPLIST:

      ALTER FULLTEXT INDEX ON table SET STOPLIST OFF
      

      试试

      SELECT * FROM ITEMDATA WHERE CONTAINS (dimensions, '"3/8*"')
      

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 2013-08-11
        • 2015-03-26
        • 2012-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多