我有一個搜索表單,允許您輸入任何想要的信息並對該數據執行搜索。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