2013-03-11 2 views
2
select 
    e.E_ID as Employee_ID, 
    e.E_NAME as Employee_Name, 
    convert(varchar(10),a.Date,103) as Date , 
    convert(varchar(8),a.Timein,108) as Time_In, 
    convert(varchar(8),a.Timeout,108) as Time_Out 
from Employee e 
LEFT JOIN Attendance a 
    ON a.E_ID = e.E_ID 
    AND (convert(varchar(10),a.Date,103) between '01/02/2013' And '28/02/2013') 

위의 쿼리는 위의 두 테이블에서 데이터를 반입하고 있지만 쿼리에없는 1 월의 값도 인쇄하고 있습니다.SQL 서버 2005에서 바운드 응답을

한 시간 동안 디버깅을 해봤습니다. 친절하게 도와주세요.

+0

편집 됨 빠른 @Raph :) – Pyromancer

+1

@ AlfredSanz 및 심지어 분노;) –

답변

2

BETWEENdd/mm/yyyy 형식화 된 문자열은 작동하지 않습니다!

LEFT JOIN Attendance a 
    ON a.E_ID = e.E_ID AND a.Date BETWEEN '20130201' AND '20130228' 

를 사용 월에 행을 다시 가져 오거나 a.Date의 값이 00:00:00

LEFT JOIN Attendance a 
    ON a.E_ID = e.E_ID AND a.Date >= '20130201' AND a.Date < '20130301' 

varchar에 열을 주조 구성 요소를 다른 것보다 시간을 가질 수있는 경우 unsargable하고 인덱스를 의미합니다 찾기를 사용할 수 없습니다.

+0

chard 데이터 형식을 smalldatetime 데이터 형식으로 변환하면 범위를 벗어나는 smalldatetime 값이 발생합니다. (이것은 내가 타입 변환을하지 않으면 가지고있는 것이다.) –

+0

@WajahatKareem - 그건 내 대답의 코드에서 오는 것이 아니다. 모든 값은'smalldatetime'으로 잘 전달됩니다. '20130201 'AS SMALLDATETIME), CAST ('20130228 'AS SMALLDATETIME), CAST ('20130201 'AS SMALLDATETIME), CAST ('20130301 'AS SMALLDATETIME') –

+0

tHANX THANX tHANX tHanx Thanx ...... .......... Wooo, 내 문제를 해결했습니다 –

1
Try below and see if it helps 

select 
    e.E_ID as Employee_ID, 
    e.E_NAME as Employee_Name, 
    convert(varchar(10),a.Date,103) as Date , 
    convert(varchar(8),a.Timein,108) as Time_In, 
    convert(varchar(8),a.Timeout,108) as Time_Out 
    from Employee e 
    LEFT JOIN Attendance a 
    ON a.E_ID = e.E_ID 
    Where (convert(varchar(10),a.Date,103) between '01/02/2013' And '28/02/2013') 
+0

이것은 왼쪽 조인을 다시 내부 조인으로 변환합니다. –

+0

이것은 완벽한 silution입니다 –

+0

내 쿼리와 다른 점은 무엇입니까? –

관련 문제