t-sql最接近的四分之一小时

时间:2014-07-23 16:16:58

标签: tsql sql-server-2008-r2

我正在寻找一种方法来返回一个调整为“最高”值的值。 25美分硬币。我无法舍入,因为返回的值不能大于原始值。例如,如果值为53.290,则需要返回53.25,而51.49将返回51.25。我可以在t-sql中执行此操作吗?

4 个答案:

答案 0 :(得分:2)

在对此进行了一些研究并进行更多研究后,我认为这是最好的解决方案。感谢大家的回复。

DECLARE @myvalue DECIMAL(8,4);
SET @myvalue = 53.26;

SELECT (Floor(@myvalue/.25)) * .25; -- Returns 53.25

SET @myvalue = 53.24;
SELECT (Floor(@myvalue/.25)) * .25; -- Returns 53.00

答案 1 :(得分:2)

你提供的答案,史蒂夫,除以0.25与此代码具有相同的效果。我不确定,但我觉得乘以四分比分数更清晰。

SELECT (FLOOR(@myValue * 4)) / 4.0

答案 2 :(得分:0)

DECLARE @Value DECIMAL(10,4) = 53.290;

SELECT ROUND(@Value/25.00, 2) * 25

Result: 53.250000000

舍入值为TWO数字

SELECT CONVERT(DECIMAL(18, 2), ROUND(@Value/25.00, 2) * 25)

Result: 53.25

答案 3 :(得分:0)

这将根据小数点右侧的值得到最接近的四分之一。我刚刚尝试过它。希望它会有用。只需尝试不同的值。

DECLARE @Value DECIMAL(10, 2) = 53.49

SELECT CASE 
        WHEN CAST(RIGHT(@Value, 2) AS FLOAT) > 0
            AND CAST(RIGHT(@Value, 2) AS FLOAT) <= 49
            THEN FLOOR(@Value) + 0.25
        WHEN CAST(RIGHT(@Value, 2) AS FLOAT) > 49
            AND CAST(RIGHT(@Value, 2) AS FLOAT) <= 74
            THEN FLOOR(@Value) + 0.50
        ELSE CEILING(@Value) - 0.25
        END