1
私は、単語のセットをループしたり、必要に応じてDOBを検索しながら各単語の特定のフィールドで同様の条件を実行したりするのに、各単語の "like"クエリーのための単語の使用
誰もがWhileループの必要性の中でこれを行う方法を見ることができますか?私はSTRING_SPLITを使ってこれを行う方法を見つけられませんでしたが、これを使ってLIKEを追加することはできません。
SET STATISTICS IO ON
SET STATISTICS TIME ON
--what will become stored proc parameters
DECLARE @searchwords NVARCHAR(max) = 'mary jo' --can accept many search words
DECLARE @LowerDate date = '01 Jan 1980' --could be NULL
DECLARE @UpperDate date = '31 Dec 1980' --could be NULL
--local variables
DECLARE @word NVARCHAR(50)
Declare @ID int
Create Table #SearchWords
(
ID int IDENTITY(1,1),
Word varchar(50)
)
Create Table #Results
(
ClientID int,
FirstName varchar(50),
LastName varchar(50),
VerificationCode varchar(100),
DOB date
)
Insert into #SearchWords
(
Word
)
SELECT
value
FROM
STRING_SPLIT(@searchwords, ' ')
WHERE
RTRIM(value) <> ''
While (Select Count(*) From #SearchWords) > 0
Begin
Select Top 1
@ID = ID,
@Word = Word
From
#SearchWords
INSERT INTO #Results
(
ClientID,
FirstName,
LastName,
VerificationCode,
DOB
)
SELECT
ClientID,
FirstName,
LastName,
VerificationCode,
DOB
FROM
Client
WHERE
(FirstName like '%' + @Word + '%' or
LastName like '%' + @Word + '%' or
VerificationCode like '%' + @Word + '%')
Delete #SearchWords Where ID = @ID
End
IF (@LowerDate IS NOT NULL and @UpperDate IS NOT NULL)
BEGIN
INSERT INTO #Results
(
ClientID,
FirstName,
LastName,
VerificationCode,
DOB
)
SELECT
ClientID,
FirstName,
LastName,
VerificationCode,
DOB
FROM
Client
WHERE
(DOB >= @LowerDate and DOB <= @UpperDate)
END
select * from #Results
drop table #Results
drop table #SearchWords
を有する変異体は、御馳走を働いた、そのためにありがとうございます。 – Philip
私の悪い@ Leran2002は、単語が渡されてもLowerDateとUpperDateが結果を表示するという簡単な方法はありますか? – Philip
@James - 私は私の答えを変更しました。バリアントとして、一時テーブルを使用することができます。 – Leran2002