我正在尝试从存储为 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)
为什么要把事情复杂化呢?您可以简单地执行以下操作:
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)
这始终有效。( MYSQL 5.6)
SELECT -1 * CAST(qty as SIGNED) as qty
FROM sales_shipments_items
Run Code Online (Sandbox Code Playgroud)