Минус времени вопроса стоимости? - PullRequest
0 голосов
/ 02 октября 2009

Использование SQL Server 2000

запрос

Select id, CONVERT(char(8), CASE WHEN DateAdd(Day, - DateDiff(Day, 0, OutTime), OutTime) > Normal_Outtime THEN Cast(Normal_Outtime AS datetime) ELSE DateAdd(Day, - DateDiff(Day, 0, OutTime), OutTime) END - CASE WHEN DateAdd(Day, - DateDiff(Day, 0, InTime), InTime) < Normal_Intime THEN Cast(Normal_Intime AS datetime) ELSE DateAdd(Day, - DateDiff(Day, 0, InTime), InTime) END - cast(totalLunchtime AS datetime), 8) ELSE '00:00:00' END AS WorkedTime
from table

Исходя из вышеприведенного запроса, выполнение outtime - intime - totallunchtime

типы данных столбца varchar

Пример

Id  |Intime   |Outtime  |totallunchtime

001 |09:00:00 |21:00:00 |01:00:00
002 |07:00:00 |07:30:00 |01:00:00
003 |00:00:00 |00:00:00 |01:00:00

WorkedTime означает (outtime - Intime - totalLunchtime)

Получение вывода вот так

id  |workedtime

001 |11:00:00
002 |23:30:00 
003 |23:00:00

Только проблема общего времени, пока минус 00:00:00 дает 23:00:00, а также для персон 002 - 23:30:00 - только 00:30: 00

Ожидаемый результат

id  |workedtime

001 |11:00:00
002 |00:23:00
003 |00:00:00

так далее ...,

Нужна помощь по запросу

1 Ответ

1 голос
/ 02 октября 2009

Будет ли что-то подобное делать работу?

declare @a datetime
declare @b datetime
declare @c datetime

set @a = '09:00:00'
set @b = '17:00:00'
set @c = '01:00:00'

select @b - @a - case when datediff(n, @a, @b) < 60 then '00:00:00' else @c end

Если вам нужно нечто большее, то вам необходимо уточнить, при каких условиях следует учитывать столбец общего времени запуска.

...