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')

上記は私のクエリです。2 つのテーブルからデータを取得していますが、クエリに含まれていない 1 月の値も出力しています。

私は1時間デバッグしてきました。親切に助けてください。

4

2 に答える 2

2

BETWEENフォーマットされdd/mm/yyyyた文字列は機能しません!

2 月に行を戻すには

   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はサージ不可であり、インデックス シークを使用できないことを意味します。

于 2013-03-11T08:37:53.920 に答える
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')
于 2013-03-11T08:38:37.023 に答える