Умножьте ВРЕМЯ в SQL Server - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть этот запрос ниже, в основном я пытаюсь вычесть 2 даты и получить часы.

Однако мне нужно, чтобы вычтенное время было умножено на количество уборщиков

SELECT
    CONVERT(TIME, ClientBooking.TimeEnd - ClientBooking.TimeStart) AS HoursWorked2,
    ClientBooking.NumberOfCleaners AS NumberOfCleaners,
    ClientBooking.TimeStart,
    ClientBooking.TimeEnd,
    ClientBooking.ClientID,
    ((((ClientInfo.FirstName + N' ') +
        ClientInfo.LastName) + N'  ') +
        ClientInfo.Company) AS ClientName,
    ((((ClientInfo.Address + N' - ') +
        ClientInfo.City) + N' - ') +
        ClientInfo.ZipCode) AS Address,
    ((ClientInfo.PhoneNumber + N'  ') +
      ClientInfo.EmailAddress) AS Contact,
    (ClientBooking.HourlyRate / 60) AS MinRate,
    (DATEDIFF(MINUTE,ClientBooking.TimeStart,ClientBooking.TimeEnd) * ClientBooking.NumberOfCleaners) AS Quantity,
    ClientBooking.HourlyRate,
    DATEDIFF(HOUR, ClientBooking.TimeStart, ClientBooking.TimeEnd) AS HoursWorked
FROM 
    (dbo.ClientBooking ClientBooking
INNER JOIN 
    dbo.ClientInfo ClientInfo ON (ClientInfo.ClientID = ClientBooking.ClientID))

В основном мне нужно умножить результат на это:

 CONVERT(TIME,"ClientBooking"."TimeEnd" - "ClientBooking"."TimeStart" )

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Если я правильно вас понимаю, это может вам помочь:

declare @start datetime = '2018-11-02 07:00:00'
declare @end datetime = '2018-11-02 08:03:00'
declare @diff int

Select @diff = DATEDIFF(minute,@start,@end)

Select case 
    when @diff < 60 then concat('00:', right('0' + convert(varchar,@diff), 2))
    when @diff >= 60 and @diff < 120 then '01:' + right('0' + convert(varchar,@diff - 60), 2)
    when @diff >= 120 and @diff < 180 then '02:' + right('0' + convert(varchar,@diff - 120), 2)
    when @diff >= 180 and @diff < 240 then '03:' + right('0' + convert(varchar,@diff - 180), 2)
end

Конечно, вам нужно добавить и следующие часы.

Я все разделил, так что это легче понять. Но вы должны иметь возможность записать его в одну строку и без переменных

Надеюсь, это поможет.

0 голосов
/ 02 ноября 2018

Как насчет использования этого:

    Select 
convert(time,DATEADD(MINUTE, ( convert(float,(DATEDIFF(minute, ClientBooking.TimeStart, ClientBooking.TimeEnd) * ClientBooking.NumberOfCleaners))/60), ''))
FROM 
    (dbo.ClientBooking ClientBooking
INNER JOIN 
    dbo.ClientInfo ClientInfo ON (ClientInfo.ClientID = ClientBooking.ClientID))

Извините, если я пропустил скобку !!

0 голосов
/ 01 ноября 2018

Вы можете использовать функцию DATEDIFF (). Что-то вроде:

DATEDIFF(hour, ClientBooking.TimeStart, ClientBooking.TimeEnd) * ClientBooking.NumberOfCleaners 

как желаемый столбец!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...