在 MySql 中 CAST 无符号到有符号 int

AnK*_*ing 1 mysql

我正在尝试从存储为 unsigned tinyint 的数据库中选择数字但在输出中我需要它们为负数。

这就是我所做的:

SELECT
 -CAST(sales_shipments_items.qty AS SIGNED INTEGER) AS qty,
FROM sales_shipments_items
WHERE 1
Run Code Online (Sandbox Code Playgroud)

& 这适用于我的本地机器上的 mysql 5.5.25 但是在服务器上返回 0 的 mysql 5.5.32-cll-lve

顺便说一句,在我的本地机器上,我什至不必使用 CAST 它在没有它的情况下工作。

我尝试使用 CONVERT 而不是 CAST 但仍然只得到 0

样本数据 sales_shipments_items

id|type|shp_num|qty
3   1   3321   2

4   1   3322   2

5   2   3321   2

6   3   3320   1

7   4   3350   1

8   5   3351   3
Run Code Online (Sandbox Code Playgroud)

我期待看到:

-2
-2
-2
-1
-1
-3
Run Code Online (Sandbox Code Playgroud)

Han*_*nky 5

为什么要把事情复杂化呢?您可以简单地执行以下操作:

SELECT (0 - qty) AS qty
FROM sales_shipments_items
Run Code Online (Sandbox Code Playgroud)

小提琴

正如 Jungsu 注意到的那样,当您的字段为 时,这不起作用UNSIGNED,在这种情况下您可以运行以下查询:

SELECT qty/-1 AS qty
FROM sales_shipments_items
Run Code Online (Sandbox Code Playgroud)

  • `qty * -1` 不起作用。但是 `qty / -1` 工作正常,有什么区别? (4认同)
  • 你可以四舍五入:) (2认同)

Ibr*_*wal 5

这始终有效。( MYSQL 5.6)

SELECT -1 * CAST(qty as SIGNED) as qty
FROM sales_shipments_items
Run Code Online (Sandbox Code Playgroud)