2015-07-20 68 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。 –