-3

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
4

1 に答える 1

4

次の2つの例はLIKE、期待どおりに機能することを示しています。「いつもうまくいくとは限らない」と言うのLIKEは、どうやって動くのかわからないからだと思いますLIKE

1つの一致が発生する必要がある例を次に示します。

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は等式演算子ではなく、単一の文字、文字の範囲、および可変数の文字を検索するための特別な構文があります。その特別な構文を(意図的かどうかにかかわらず)使用する列にテキストをフィードすると、その特別な構文は文字通りのテキストではなく、文字一致命令として扱われます。

于 2012-10-04T11:52:21.403 に答える