在 SQL Server 中创建用户定义的 ROUND 函数

Posted

技术标签:

【中文标题】在 SQL Server 中创建用户定义的 ROUND 函数【英文标题】:Creating user defined ROUND function in SQL Server 【发布时间】:2021-05-26 12:45:23 【问题描述】:

我正在尝试创建一个用户定义的 ROUND 函数,以便它的工作方式与 SQL Server 中的标准 ROUND 函数不同。

基本上我想要做的是,如果输入值是例如 80.5,我正在尝试创建一个 ROUND 函数,将这个值四舍五入为 80 而不是 81(这是标准 ROUND 的输出函数)。

我为此创建了一个查询,并在创建 ROUND 函数时添加了相同的代码。下面是我创建的查询:

SELECT 
    CASE WHEN (80.56925 - ROUND(80.56925,0)) = -0.5 THEN FLOOR(80.56925) 
         WHEN (80.56925 - ROUND(80.56925,0)) > -0.5 AND (80.56925 - ROUND(80.56925,0)) <= -0.1 THEN ROUND(80.56925,0)
         WHEN (80.56925 - ROUND(80.56925,0)) >= 0 THEN ROUND(80.56925,0)
         ELSE 80.56925 
    END

这个查询的输出就是我需要的。

现在我正在尝试进一步增强这一点,因为正如您可能已经理解的那样,这只有在我有 1 个小数位值即 ROUND 函数基本上作为 ROUND(input, 0) 工作时才有效,但我想为 @ 运行它987654328@、ROUND(input, 2)等等。

现在我知道我需要传递另一个变量作为输入参数,但我不确定我需要在上面的SELECT 语句中进行哪些更改。

对我如何处理这个问题并改进ROUND 功能有什么建议吗?

【问题讨论】:

那么这里的逻辑是什么,当你有0.5而不是向上时,你只想向下取整吗? 0.51 呢? 是的!这就是我想做的四舍五入而不是在它为 0.5 时四舍五入......查询有效,但仅适用于 1 个小数位值......我希望在 0.51 或 0.55 或 0.567 等时运行相同的逻辑...对不起,如果我没有说清楚。 【参考方案1】:

如果我理解正确,只需减去1,四舍五入,然后将其加回

SELECT ROUND(80.5 - 1,0) + 1 AS RoundedNumber;

【讨论】:

以上是关于在 SQL Server 中创建用户定义的 ROUND 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server Management Studio 中创建存储过程时出现语法错误

在 SQL Server 中创建自定义日期范围列表以便于使用

在SQL Server中创建用户角色及授权(使用SQL语句)

如何在 SQL Server 中创建自定义动态数据掩码函数?

在 SQL Server 中创建数据库用户时使用 pymssql 出错

如何在我添加到项目中的 SQL Server Express 数据库中创建用户?