SQL文本LIKE并不总是有效

时间:2012-10-04 09:54:26

标签: sql sql-server-2008 tsql full-text-search sql-like

我正在比较SQL Server 2008中同一个表和同一列中的文本值,但结果有时是不正确的。可能相关的栏目信息:

Data type: text  
Full Text: True  
Collation: SQL_Latin1_General_CP1_CI_AS

在100个实际匹配项中,我只得到62个。我比较了LIKE在某些比较工具中没有获取的字段值,它们是100%相同,没有额外的空格,换行符等。

知道为什么文字LIKE并不总是有效?

SQL:

SELECT a.text as one, b.text as two
  FROM [Db].[dbo].[Table] a join
  [Db].[dbo].[Table] b on
  a.text LIKE b.text

1 个答案:

答案 0 :(得分:4)

以下两个示例显示LIKE完全按预期工作。我怀疑你说“LIKE并不总是有效”的原因是因为你不知道LIKE是如何运作的。

这是一个匹配应该发生的例子:

CREATE TABLE #tmpTable
(
  [Text] TEXT
);

INSERT INTO #tmpTable VALUES ('Hello');

SELECT *
  FROM #tmpTable tmpTable1
       INNER JOIN #tmpTable tmpTable2
         ON tmpTable1.[Text] LIKE tmpTable2.[Text];

DROP TABLE #tmpTable;

Hello就像Hello,”你说。

这是匹配,不会发生匹配:

CREATE TABLE #tmpTable
(
  [Text] TEXT
);

INSERT INTO #tmpTable VALUES ('[h]');

SELECT *
  FROM #tmpTable tmpTable1
       INNER JOIN #tmpTable tmpTable2
         ON tmpTable1.[Text] LIKE tmpTable2.[Text];

DROP TABLE #tmpTable;

“但是[h] 就像[h]一样,”你说。

LIKE不是等号运算符,它具有搜索单个字符,字符范围和可变字符数的特殊语法。如果您碰巧在使用该特殊语法(有意或无意)的列中提供文本,则会将特殊语法视为字符匹配指令,而不是文字文本。