この 4 つの条件に 1 つの正規表現を使用できますか?
select * from ExceEnt where
FirstName Like @name+'[ ]%'
or FirstName=@name
or FirstName Like'%[ ]'+@name
or FirstName Like'%[ ]'+@name+'[ ]%'
この 4 つの条件に 1 つの正規表現を使用できますか?
select * from ExceEnt where
FirstName Like @name+'[ ]%'
or FirstName=@name
or FirstName Like'%[ ]'+@name
or FirstName Like'%[ ]'+@name+'[ ]%'
私はあなたを完全に理解していなかったかもしれませんが、data
あなたが検索しようとしているのと完全に、またはその一部が一致する表現が必要であると期待しています.
PATINDEX ( MSDN ) メソッドを参照して、4 つ以上をマージして単一のエンティティとして表示することをお勧めします。
この例を確認してください: (これは問題を理解するのに役立ちます)
--Drop table if table already exists
if exists(select * from sys.tables where object_id=object_id('ExceEnt'))
drop table ExceEnt
GO
--Create table
create table ExceEnt
(
FirstName varchar(200) NULL
)
GO
--Insert some data
insert into ExceEnt values('Never')
insert into ExceEnt values('Hopeless')
insert into ExceEnt values('NeverHopeless')
insert into ExceEnt values('As the name says NeverHopeless')
insert into ExceEnt values('Exclude others')
insert into ExceEnt values('Exclude this one too')
--Here use PATINDEX to find desired result
select * from ExceEnt where patindex('%Hopeless%',FirstName)>0
上記のスクリプトは、次の結果を生成します。
既に説明したように、SQL Server は正規表現をネイティブにサポートしていません。考えられる解決策の 1 つは、CLR に頼ることです。
ただし、代わりに、次のように 4 つの条件を 1 つだけに減らすこともできます。
…
WHERE ' ' + FirstName + ' ' LIKE '% ' + @name + ' %'
-- or, if you prefer: LIKE '%[ ]' + @name + '[ ]%'
確かに、この条件によってクエリがサージ不可になる可能性がありますが、フィルターとして使用すると、とにかくクエリがサージ不可になります。LIKE '%whatever'