假设我们要租一辆自行车。有每月($ 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
我想做类似上面的事情。
答案 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年以后可用,如果需要,可以将其删除。