如何在SQL中将负数转换为正数

how to convert a negative numeric to postive in sql

提问人:SqlLearner 提问时间:11/17/2023 更新时间:11/17/2023 访问量:35

问:

我想将 -2.07 转换为 207,但使用 ABS(),如图所示;它返回 200 而不是 207。 请帮助我理解我在这里缺少什么。谢谢。

 declare @ReimbursementCents int,
 @journey_fare numeric(7,2)
 SET @journey_fare = -2.07

 SET @ReimbursementCents = convert(int,ABS(@journey_fare)) * 100
 if (@ReimbursementCents > 0)
 print @ReimbursementCents
SQL MySQL 类型转换

评论

0赞 Error_2646 11/17/2023
cast(ABS(@journey_fare)*100 as UNSIGNED)或类似的东西。现在发生的事情是,它在乘以 100 之前转换为整数。所以 -2.07 到 2.07 到 2 然后 *100
0赞 Jonas Metzler 11/17/2023
也许只是 ?(ABS(@journey_fare) * 100) DIV 1
0赞 P.Salmon 11/17/2023
mysql <> sql-server 发布的代码不会在 MySQL 中语法

答:

-1赞 superdev 11/17/2023 #1

看起来问题在于运算顺序和乘以 100 的位置。目前,您正在将 @journey_fare 的绝对值转换为整数,然后将其乘以 100,这可能会产生负值的意外结果。

要达到使用 ABS() 将 -2.07 转换为 207 的预期结果,您应该首先乘以 100,然后转换为整数。 下面是更正后的代码:

DECLARE @ReimbursementCents INT,
        @journey_fare NUMERIC(7,2);

SET @journey_fare = -2.07;

-- Multiply by 100 and then convert to integer
SET @ReimbursementCents = CONVERT(INT, ABS(@journey_fare) * 100);

IF (@ReimbursementCents > 0)
    PRINT @ReimbursementCents;

现在,对于给定的 @journey_fare值 -2.07,此代码将正确输出 207。关键更改是在应用 ABS() 函数之前乘以 100。

评论

0赞 Jonas Metzler 11/17/2023
你试过这个吗?我想这会在MySQL中引发错误消息。请参阅文档:dev.mysql.com/doc/refman/8.2/en/...
0赞 SqlLearner 11/17/2023
@superdev 非常感谢你这么好地解释它。