2013-03-11 3 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') 

Выше мой запрос, я извлекаю данные из двух таблиц, но он также печатает значения январа, который не находится в запросе.Не связанные ответы с sql server 2005

Я отлаживал в течение часа, пожалуйста, пожалуйста, любую помощь.

+0

отредактировано fast @Raph :) – Pyromancer

+1

@AlfredSanz и даже не разъярен;) –

ответ

2

BETWEEN и dd/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' 

Casting столбец varchar является unsargable и означает индекс поиск не может быть использован,

+0

Преобразование типа данных char в тип данных smalldatetime приводит к значению smalldatetime за пределами диапазона. (Это то, что я получил, если я не придумал его) –

+0

@WajahatKareem - Это не исходит из кода в моем ответе. Все значения, отличные от «smalldatetime», прекрасны. 'SELECT CAST ('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

Это идеальное решение –

+0

Какая разница с моим запросом? –