원하는 정보를 입력하고 해당 데이터를 검색 할 수있는 검색 양식이 있습니다. 여기TSQL 검색 기간
양식과 같은 모습입니다 :
내 목표는 그들이 시작 및 종료 날짜를 입력 할 수 있도록하는 것입니다. 그러나, 그들은 단지 하나 또는 다른 것을 입력하기로 선택할 수 있습니다. 이 경우 올바르게 처리하려면 저장 프로 시저가 필요합니다.
끝 날짜가 비어 있으면 끝 날짜가 오늘 날짜로 바뀝니다. 시작 날짜가 비어 있으면 모든 날짜를 포함 할 수 있습니다 (예 : 모든 날짜를 포함하는 기본 날짜).
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');
레코드 시작 1 달 전에 시작 날짜 만 넣을 때를 제외하고 모든 것이 작동하는 것처럼 보입니다. 그 날짜에 시작해서 현재 날짜까지 아무 것도 얻지 못합니다. 예 : 2014 년 2 월 1 일의 레코드가 있으며 2014 년 1 월 1 일 내 검색에 사용됩니다. 2014 년 1 월 1 일과 오늘 날짜 사이에 무엇이든 가져와야합니다. – SBB
날짜를 '20140101','20140102'와 같은 ISO 형식으로 작성하려 했습니까? 나는이 [데모] (http://sqlfiddle.com/#!6/b29e8)를 로직을 테스트하기 위해 재빨리 만들었으며, 괜찮을 것으로 보인다. –
이 오류가 발생했지만 날짜 필드 중 하나도 INT가 아닙니다. - 피연산자 유형 충돌 : int가 날짜와 호환되지 않습니다. – SBB