我正在比较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
答案 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
不是等号运算符,它具有搜索单个字符,字符范围和可变字符数的特殊语法。如果您碰巧在使用该特殊语法(有意或无意)的列中提供文本,则会将特殊语法视为字符匹配指令,而不是文字文本。