2015-07-20 70 views
0

我正在研究asp.net中的應用程序。有一個頁面可以搜索員工的詳細信息。用戶可以輸入任何值,在多個領域的搜索像SQL Server 2008中列上的多個搜索條件

FirstName, LastName, DateOfBirth, EmployeeCode 

用戶可以像這樣輸入值:

Raj*,1980 

這意味着用戶要搜索Raj*1980上面給出的字段數之中。

我正在查看SQL Server中的全文搜索,但問題是全文搜索不適用於DateTime列。

數據可能來自多個表。

請給我任何解決方案。

回答

0
+0

Paulsm4,這看起來不錯。但是,如何處理需要使用多個搜索文本過濾日期字段的情況。例如Raj *,1980,Male ...可以有多個逗號分隔值,我需要搜索日期字段。在全文搜索的情況下,這很容易。 –

+0

「逗號分隔值」聽起來像「結構化數據」,不是嗎?問:爲什麼不解析你的csv數據並將其存儲到SQL表中的普通列中? – paulsm4

+0

混合查詢是一個不錯的選擇,但是當與CONTAINSTABLE一起使用時,這並沒有給出正確的結果。 –

1

不確定,但它可能會幫助你。

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 
+0

謝謝Tirthak .. –

+0

是否幫助您實現您的功能?如果它幫助請比upvote。 –