8

SQL Server には、ワイルドカード検索を処理する LIKE 演算子があります。私の顧客は、アプリケーションのユーザー インターフェイスで "*" (アスタリスク) 文字をワイルドカード文字として使用したいと考えています。LIKE ワイルドカード検索を実行する前に、キーワードに a "%" であり、実際の文字列で "%" を見つける必要があります。もしそうなら、それらは何ですか?

したがって、[table1].[column1] のテキスト文字列に「*」(アスタリスク)が含まれることはないと仮定してください。

これが私がこれまでに持っているものです。"%"標準キャラとカスタム以外のシチュエーションをもっと扱う必要があるのか"*"

-- custom replacement
select REPLACE('xxx*xxx', '*', '%')

-- standard replacements
select REPLACE('xxx%xxx', '%', '[%]')
select REPLACE('xxx_xxx', '_', '[_]')  -- ???
select REPLACE('xxx[xxx', '[', '[[]')  -- ???
select REPLACE('xxx]xxx', ']', '[]]')  -- ???

例:

SET @p = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@p, ']', '[]]'), '[', '[[]'), '_', '[_]'), '%', '[%]'), '*', '%')

SELECT 'xxxxxxxxx%xxxxxx' LIKE @p

SELECT [table1].[column1] LIKE @p
4

2 に答える 2

10

「]」をエスケープする必要はないと思いますが、すべて取得したようです。技術的には、左角かっこ ('[') をエスケープする必要があるだけです。

DECLARE @Table1 TABLE
(
   Column1 VARCHAR(32) NOT NULL PRIMARY KEY
);

INSERT @Table1(Column1)
VALUES
   ('abc%def'),
   ('abc_def'),
   ('abc[d]ef'),
   ('abc def'),
   ('abcdef');

DECLARE @p VARCHAR(32) = 'abc*]*';

DECLARE @Escaped VARCHAR(64) = REPLACE(@p, '[', '[[]');
SET @Escaped = REPLACE(@Escaped, '_', '[_]');
SET @Escaped = REPLACE(@Escaped, '%', '[%]');
SET @Escaped = REPLACE(@Escaped, '*', '%');

SELECT T.Column1
FROM @Table1 T
WHERE T.Column1 LIKE @Escaped;
于 2013-10-23T21:01:04.567 に答える
2

いいね!!-条項に関連するすべての情報については、こちらをご覧ください。LIKE

また、SQL LIKE 句の特殊文字のリスト

于 2013-10-23T21:01:14.513 に答える