在MySql中CAST unsigned to signed int

时间:2013-11-19 13:37:01

标签: mysql

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

这就是我的所作所为:

SELECT
 -CAST(sales_shipments_items.qty AS SIGNED INTEGER) AS qty,
FROM sales_shipments_items
WHERE 1

&安培;这适用于我的本地机器与mysql 5.5.25 但是使用mysql 5.5.32-cll-lve

在服务器上返回0 顺便说一句,在我的本地机器上,我甚至不需要使用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

我期待看到:

-2
-2
-2
-1
-1
-3

2 个答案:

答案 0 :(得分:4)

为什么会使它复杂化?你可以这样做:

SELECT (0 - qty) AS qty
FROM sales_shipments_items

<强> Fiddle

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

SELECT qty/-1 AS qty
FROM sales_shipments_items

答案 1 :(得分:0)

这始终有效。 (MYSQL 5.6

SELECT -1 * CAST(qty as SIGNED) as qty
FROM sales_shipments_items