我有一个搜索表单,允许您输入任何想要的信息并对该数据执行搜索。TSQL搜索日期范围
这里是什么形式的样子:
我的目标是让他们输入开始日期和结束日期。但是,他们可以选择只输入一个或另一个。在这种情况下,我需要我的存储过程正确处理它。
如果结束日期为空,则结束日期将成为今天的日期。如果开始日期是空的,我们可以做任何日期(例如,默认日期为sq的默认日期,其中包括所有内容)
awardDate
是正在搜索的字段,如果两个日期都输入了,那么它需要是范围between start and end
下面是我当前的存储过程:
SELECT DISTINCT A.[awardID],
A.[awardDescription],
convert(varchar,cast(A.[awardValue] as money),1) as awardValue,
CONVERT (VARCHAR (10), A.[awardDate], 101) AS awardDate,
CONVERT (VARCHAR (10), A.[timestamp], 101) AS timestamp,
B.[FirstName] + ' ' + B.[LastName] as empName,
B.[ntid] AS empNTID,
C.[awardType] as awardTypeName,
D.[locationName],
E.[awardStatusName]
FROM taxTracker AS A
INNER JOIN
empTable AS B
ON A.[employee] = B.[empID]
INNER JOIN
taxTrackerAwardTypes AS C
ON A.[awardType] = C.[awardTypeID]
INNER JOIN taxTrackerLocations as D
ON A.[awardLocation] = D.[id]
INNER JOIN taxTrackerStatuses as E
ON A.[awardStatus] = E.[awardStatusID]
WHERE ((A.[employee] IN (SELECT ParamValues.x2.value('empID[1]', 'VARCHAR(60)')
FROM @employees.nodes('/employees/employee') AS ParamValues(x2)))
OR (ISNULL(@awardType, '') <> ''
AND A.[awardType] LIKE '%' + @awardType + '%')
OR (ISNULL(@awardStatus, '') <> ''
AND A.[awardStatus] LIKE '%' + @awardStatus + '%'))
FOR XML PATH ('details'), TYPE, ELEMENTS, ROOT ('root');
似乎一切正在工作,除非我只在开始日期之前就像一个月前的记录。它应该从那天开始,然后得到任何东西直到当前日期。例如:记录是2014年2月1日,我在2014年1月1日进行了搜索。它应该在1/1/2014和今天的日期之间得到任何东西 – SBB
你有没有试过用'20140101','20140102'等ISO格式写日期?我很快测试了这个[demo](http://sqlfiddle.com/#!6/b29e8),看起来没问题。 –
但是我得到了这个错误,但是没有一个日期字段是INT - '操作数类型冲突:int与日期不兼容' – SBB