2009-10-14 147 views
0

使用SQL Sever的2005减少时间问题?

从下面的查询我得到的总的工作时间是指Outtime - 银泰百货,假设当我减去第二天时间是指显示错误的时间

查询

Select ID, Normal_Intime, Normal_Outtime, Date, Intime, outtime, CONVERT(char(8), CASE WHEN InTime < Outtime THEN CASE WHEN OutTime > Normal_Outtime THEN CAST(Normal_Outtime AS datetime) ELSE CAST(Outtime AS datetime) END - CASE WHEN InTime < Normal_Intime THEN CAST(Normal_Intime AS datetime) ELSE CAST(Intime AS datetime) END ELSE CASE WHEN InTime < Normal_Intime THEN CAST(Normal_Intime AS datetime) ELSE CAST(Intime AS datetime) END - CASE WHEN OutTime > Normal_Outtime THEN CAST(Normal_Outtime AS datetime) ELSE CAST(Outtime AS datetime) END END, 8) AS workedtime from table1 

输出

ID Normal_Intime, Normal_Outtime, Date Intime, Outtime, Worktime 

01 10:00:00 19:00:00 01/09/2009 08:20:56 15:40:15 05:40:15 
01 18:00:00 05:00:00 02/09/2009 15:00:59 08:20:16 13:00:00 

第一个是正确的, 第二次工作时间应该给上午11点00分因为银泰时间18:00:00和外勤​​时间是05:00:00(次日上午05:00:00),现在工作时间为18:00:00 - 05:00:00,因为13:00:00 。它应该只给11:00:00

如何减去第二天的时间。

需要查询帮助

+1

仍然将日期存储在varchar字段中? – MartW 2009-10-14 10:31:26

回答

0

如果时间少于时间,则在之前添加24到减去

+0

我认为这会比使用datediff功能更快 – 2009-10-14 10:20:47

+0

如何添加24.你能告诉我 – Gopal 2009-10-14 10:31:28

+0

datepart(小时,[Normal_outtime])+ 24 – 2009-10-14 10:47:42

0

不要使用减法,使用datediff函数。