SQL计算一个项目使用了多长时间的价格-月价格,周价格和小时价格

时间:2018-10-21 20:19:44

标签: sql-server tsql

假设我们要租一辆自行车。有每月($ 100),每周($ 10)和每小时($ 1)的价格。如果我使用它1个月,2周和4个小时,价格将是124美元。我有一个while循环,它将执行模数运算,以查看小时数是否大于每月和每周的时间,并增加价格并减去借来的项目的持续时间。

SET @dateDiff =   DATEDIFF(hour,@TimeIn,@TimeOut); 
-- 7 days is 168 hours
-- 30 days is 720 hour

WHILE  @bool != 1  
    BEGIN  

    IF (@dateDiff > 720)
        SET  @totalPrice += (@dateDiff%720) * @monthlyPrice
        SET @dateDiff = @dateDiff - (@dateDiff%720)
    ELSE IF  (@dateDiff > 168)
        SET  @totalPrice += (@dateDiff%168) * @weeklyPrice
        SET @dateDiff = @dateDiff - (@dateDiff%168)
    ELSE
        SET  @totalPrice += @dateDiff * @weeklyPrice
        SET @bool = 1;
END  

我想做类似上面的事情。

2 个答案:

答案 0 :(得分:2)

{{1}}

不需要循环

答案 1 :(得分:1)

如何直接使用@TimeIn@TimeOut而不先计算小时数,在这种情况下,@Start@End代表@TimeIn@TimeOut

DECLARE @Start DATETIME = '2018-01-01 01:00:00';
DECLARE @End   DATETIME = '2018-02-14 04:00:00';

SELECT FORMAT(
       DATEDIFF(Month, @Start, @End) * 100 + --Months
       DATEDIFF(Week, @Start, DATEADD(Month, -DATEDIFF(Month, @Start, @End), @End)) * 10 + --Weeks
       DATEDIFF(Hour, @Start, DATEADD(Day, -DATEDIFF(Day, @Start, @End), @End)) --Hours
       , 'C'
       , 'en-us'
       ) AS ClientShouldPay;

结果:

+-----------------+
| ClientShouldPay |
+-----------------+
| $123.00         |
+-----------------+

注意: FORMAT() 功能仅在2012年以后可用,如果需要,可以将其删除。