我有一个以下查询,我在一个程序中使用过这个查询,并希望将一个数字转换为正数,因为它现在是负数。
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
,这不应该发生。
请帮助我。 感谢
答案 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;