如何将数字四舍五入到60
的间隔?
例如,如果我有数字61
,它应该四舍五入到60
,如果数字是150
,它应该四舍五入到120
,如果是{{1} }应该四舍五入为59
。
答案 0 :(得分:4)
要截断值乘以60,再除以60。请参见演示:
SELECT 61/60*60 --result: 60
SELECT 59/60*60 --result: 0
数字必须为int(bigint,smallint,tinyint)。如果不是,请使用CAST / CONVERT。
如果将整数除数除以整数除数,则结果为 一个整数,其结果的任何小数部分都会被截断。
答案 1 :(得分:2)
丑陋,但有效: 整数除法然后相乘
SELECT (125 / 60 ) * 60
答案 2 :(得分:2)
这就是你想要的
DECLARE @TestVal INT = 59
SELECT @TestVal - (@TestVal % 60)
SET @TestVal = 61
SELECT @TestVal - (@TestVal % 60)
SET @TestVal = 150
SELECT @TestVal - (@TestVal % 60)
答案 3 :(得分:1)
另一种方法是使用modulus运算符将除数除以60,然后减去:
%(模数)(Transact-SQL)
返回一个数字的余数除以另一个。
例如:
declare @valueToTest int = 150
select @valueToTest - (@valueToTest % 60) as result
-- result: 120
因此,当您将@valueToTest
除以60并从原始@valueToTest
中减去它时,将得到余数。
答案 4 :(得分:0)
我更喜欢FLOOR,而不是依赖Integer除法,这就是FLOOR的用途。例子
DECLARE @YourVal DECIMAL(10,4) = 220.1234;
SELECT @YourVal / 60 * 60, FLOOR(@YourVal / 60) * 60;