不確定,但它可能會幫助你。
Declare @Input as varchar(50) = 'Field1,Field2,Field3'
DEClare @Character as CHAR(1) = ','
DECLARE @StartIndex INT, @EndIndex INT
DECLARE @Output TABLE (ID int IDENTITY(1,1),
Item NVARCHAR(1000)
)
SET @StartIndex = 1
IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
BEGIN
SET @Input = @Input + @Character
END
WHILE CHARINDEX(@Character, @Input) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Character, @Input)
INSERT INTO @Output(Item)
SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
END
--Finally Received all Search Keyword Values in @Output table
--Now Moving towards Search functionality
DECLARE @Result Table(data varchar(50),ID int)
WHILE (1=1)
BEGIN
IF(SELECT COUNT(1) FROM @Output) > 0
BEGIN
DECLARE @ID_OT INT = 0,@keyword AS VARCHAR(50) = ''
SELECT TOP 1 @ID_OT = ID,@keyword = Item FROM @Output ORDER BY id
--Here you need to identify a unique column which can be used to filter redundant values
INSERT INTO @Result
SELECT data,id
FROM TableName T
Left join @Result R ON T.id = R.id
WHERE
((FirstName like '%' + @keyword + '%') OR
(LastName like '%' + @keyword + '%') OR
(EmployeeCode like '%' + @keyword + '%') OR
(ISDATE(@keyword) = 1 AND CONVERT(VARCHAR(15),DateOfBirth,110) like '%' + CONVERT(VARCHAR(15),@keyword,110) + '%'))
AND R.id IS NULL
DELETE FROM @Output WHERE id = @ID_OT
END
ELSE
BREAk
END
Paulsm4,這看起來不錯。但是,如何處理需要使用多個搜索文本過濾日期字段的情況。例如Raj *,1980,Male ...可以有多個逗號分隔值,我需要搜索日期字段。在全文搜索的情況下,這很容易。 –
「逗號分隔值」聽起來像「結構化數據」,不是嗎?問:爲什麼不解析你的csv數據並將其存儲到SQL表中的普通列中? – paulsm4
混合查詢是一個不錯的選擇,但是當與CONTAINSTABLE一起使用時,這並沒有給出正確的結果。 –