想要将负数转换为正数

时间:2016-07-05 10:46:31

标签: sql-server

我有一个以下查询,我在一个程序中使用过这个查询,并希望将一个数字转换为正数,因为它现在是负数。

 UPDATE SHIPMENT
        SET TOTAL_SHIP_UNIT_COUNT = (
          CASE
            WHEN V_SHIP_UNIT_COUNT > v_diff_cost
            THEN V_SHIP_UNIT_COUNT - v_diff_cost
            ELSE v_diff_cost       - V_SHIP_UNIT_COUNT
          END)
        WHERE SHIPMENT_GID = v_shipment_id;
        COMMIT;

在此查询中,v_diff_cost值为负值,因此在执行( V_SHIP_UNIT_COUNT - v_diff_cost)操作时,它会添加两个值,因此如果我将v_diff_cost值转换为正值,则减去它会得到正确的结果。< / p>

假设V_SHIP_UNIT_COUNT值为33且v_diff_cost value为-10,那么在这种情况下,它应该以{{1​​}}执行操作,但它正在执行33-10 = 23,这不应该发生。

请帮助我。 感谢

3 个答案:

答案 0 :(得分:5)

使用 ABS() 功能,

  

MSDN:一种数学函数,它返回指定数值表达式的绝对(正)值。

UPDATE SHIPMENT
    SET TOTAL_SHIP_UNIT_COUNT = (
      CASE
        WHEN V_SHIP_UNIT_COUNT > v_diff_cost
        THEN V_SHIP_UNIT_COUNT - ABS(v_diff_cost)
        ELSE ABS(v_diff_cost)       - V_SHIP_UNIT_COUNT
      END)
    WHERE SHIPMENT_GID = v_shipment_id;
    COMMIT;

答案 1 :(得分:0)

试试这段代码:

UPDATE SHIPMENT
        SET TOTAL_SHIP_UNIT_COUNT = (
          CASE
            WHEN V_SHIP_UNIT_COUNT > v_diff_cost
            THEN V_SHIP_UNIT_COUNT - abs(v_diff_cost)
            ELSE v_diff_cost       - abs(V_SHIP_UNIT_COUNT)
          END)
        WHERE SHIPMENT_GID = v_shipment_id;
        COMMIT;

答案 2 :(得分:0)

试试这个:

UPDATE SHIPMENT
SET TOTAL_SHIP_UNIT_COUNT = ABS(V_SHIP_UNIT_COUNT - ABS(v_diff_cost)) 
WHERE SHIPMENT_GID = v_shipment_id;