2

以下のヘルプが必要です。

私は sql seever 2008 を使用しており、like 演算子を使用しているクエリがあります。文字列の一部を使用している場合は正常に機能しますが、演算子データベースのように完全な文字列を使用している場合、結果は入力されません。

例えば。説明列を含むテーブルEMpがあります。説明列に含まれる場合

Description
-------------------------------------------------
'John joined on Wednesday/CELL PHONE [1234567890]'

クエリを書いているとき

select * from EMp where 
description like '%CELL%'

ただし、クエリを次のように書いているときは正常に動作します

select * from EMp where 
description like '%John joined on Wednesday/CELL PHONE [1234567890]%'

値を返しません。

like 演算子は、文字列全体ではなく文字列の一部のみを機能させるということですか。また、スペースが問題ではないことを確認するために LTRIM と RTRIM も試しましたが、機能していません。

ありがとう

4

1 に答える 1

5

LIKEは、ワイルドカードに加えて、限られた一連のパターン マッチをサポートしていることに注意してください%。これらのパターンの 1 つに、範囲を一致させるためのブラケットが含まれています。

参照: http://msdn.microsoft.com/en-us/library/ms179859.aspx

クエリ内の括弧により、「指定された範囲 ([af]) またはセット ([abcdef]) 内の任意の 1 文字」が検索されます。

description like '%John joined on Wednesday/CELL PHONE [1234567890]%'

したがって、クエリは SQL Server にセット [1234567890] 内の文字を検索するように要求しています。

MSDNのドキュメントを読むと、ワイルドカード文字をリテラルとして使用するためのガイドラインが示されています。以下に少し例を示します。

DECLARE @table TABLE ( SomeText VARCHAR( 100 ) );
INSERT @table ( SomeText ) VALUES ( 'here is a string with [brackets]' );

-- matches with wildcards on both sides of the pattern
SELECT * FROM @table WHERE SomeText LIKE '%[brackets]%';

-- won't match
SELECT * FROM @table WHERE SomeText LIKE '%here is a string with [brackets]%';

-- matches, because expression is escaped
SELECT * FROM @table WHERE SomeText LIKE '%here is a string with [[brackets]%';

-- a confusing (but valid) escape sequence AND a wildcard
SELECT * FROM @table WHERE SomeText LIKE '%here is a string with [[][a-z]rackets]%';

より複雑なパターンでより大きな文字列を検索する場合は、全文索引付けの方が便利な場合があることに注意してください。これは、SQL Server 2008 のすべてのエディション (Express も含む) でサポートされています。

于 2013-01-14T06:40:32.083 に答える