繁体   English   中英

在SQL Server中乘以TIME

[英]Multiply TIME in SQL Server

我在下面有这个查询,基本上我想减去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" )

如何使用这个:

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

对不起,如果我错过了括号!

您可以使用DATEDIFF()函数。类似:

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

作为您想要的专栏!

如果我对您的理解正确,那么可以为您提供帮助:

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

当然,您还需要添加以下几个小时。

我已将所有内容拆分,因此更容易理解。 但是您应该能够在一行中编写它,并且也没有变量

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM