【问题标题】:SQL text LIKE doesn't always work [closed]SQL文本LIKE并不总是有效[关闭]
【发布时间】:2012-10-04 09:54:26
【问题描述】:

我在 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

【问题讨论】:

  • 我们需要示例,至少您认为应该匹配但不匹配的内容,以及您正在使用的模式。
  • 向我们展示您正在使用的查询(以及它所针对的数据)!我们既不能读懂你的想法,也不能读懂你的屏幕......
  • 知道为什么文本 LIKE 并不总是有效吗? 同样的原因,我编写的代码并不总是没有错误。编译器坏了。
  • 结果正确的。查询错误。
  • 如果你使用 = 而不是 LIKE,你会得到同样的结果吗?

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


【解决方案1】:

以下两个示例显示 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 不是等号运算符,它具有用于搜索单个字符、字符范围和可变字符数的特殊语法。如果您碰巧在使用该特殊语法(有意或无意)的列中为其提供文本,它将将该特殊语法视为字符匹配指令,而不是文字文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 2011-08-20
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2015-06-28
    相关资源
    最近更新 更多