【问题标题】:CONTAINS query using integer - SQL server 2005包含使用整数的查询 - SQL Server 2005
【发布时间】:2013-03-25 15:38:25
【问题描述】:

我对使用 ms SQL 服务器相当陌生,想知道是否有办法将整数列值转换为字符串以用于全文包含查询。

例子:

Select 
   *, 
   (select count(t2.id) from table2 t2 where contains(t2.text, t.someinteger)) as number 
from table1 t`

由于t.someinteger 不是字符串,所以查询失败。

我尝试将整数转换为varchar,但它在语法上不正确。有人知道如何实现吗?

非常感谢任何帮助。

【问题讨论】:

  • 如果你给出你得到的确切错误会有所帮助,但无论如何语法都是错误的:CONTAINS 的搜索词是单个值,而不是列中的多个值。因此,您可以为搜索词声明变量或使用常量,但不支持您的语法。
  • 我会小心,根据您的代码,您可能会成为 SQL 注入的受害者
  • 您是否尝试将整数作为子字符串进行匹配(“123”匹配“0123”和“12345”)?

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


【解决方案1】:

全文包含不会像您期望的那样工作。全文查询有很多技巧。也许你应该看看 like 运算符:

select 1 where '1234' like '%' + cast(34 as nvarchar) + '%';

select 1 where '1234' like '%' + cast(35 as nvarchar) + '%';

全文搜索不适用于搜索此帖子中显示的子字符串:

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

全文搜索是如何工作的?让它变得简单:它获取您的文本,将其拆分为标记/单词(将其视为标签),并为每个标签/单词编制索引。

因此,如果您查找单词/标签,它会非常快。如果您在单词中查找子字符串,它的行为就像“LIKE”查询一样。

根据我自己的经验:如果您从单词的末尾或中间的子字符串中查找,全文搜索将无济于事。如果你找词的开头,它会很快。

所以,如果你想找到单词“substring”的一些子串:

1) 好的(快速)查询将是“sub*”、“subs*”等 => 将使用索引

2) 真正糟糕的查询将是:“*string”、“str”等 => 不会使用索引

【讨论】:

  • 这类似于我目前拥有的解决方案。我正在研究全文匹配,因为它将在我需要迁移的 60000+ 行数据集上执行得更快。
猜你喜欢
  • 2018-04-18
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多