特定の列に、文字列パラメーターで渡されたすべての単語が表示される順序に関係なく含まれているすべての行を取得したいと考えています。
パラメータが次の場合、'hi abc'
この行が必要ですabc def hijk
。hijk lmnop qr
なんとかできましたが、あまり良くないと思うので、代替案を見てみたいです。以下のコードが行うことをよりよく達成するにはどうすればよいですか?
create table t (s varchar(200));
insert into t (s) values
('abc def hijk'),
('hijk lmnop qr'),
('stu'),
('v xyz')
;
create function dbo.matchRows (@string varchar(max))
returns varchar(max)
begin
set @string = replace(@string, '''', '''''');
set @string = replace(@string, ' ', ' ');
set @string = replace(@string, ' ', ' ');
set @string = replace(@string, ' ', '%'' and s like ''%');
set @string = 's like ''%' + @string + '%''';
set @string = 'select * from t where ' + @string;
return @string;
end;
declare @query varchar(max);
set @query = (select dbo.matchRows('hi abc'));
execute (@query);