首页 > 解决方案 > 如何反转int unsigned?

问题描述

我在 MySQL 5.7 中使用 da 数据类型 bigint unsigned 并希望通过查询输出反转值。所以 30 变成 -30。

  SELECT
    mynumber * (- 1) as value

这将返回错误:

Data truncation: BIGINT UNSIGNED value is out of range 

在不更改数据类型的情况下如何做到这一点?

标签: mysql

解决方案


无符号只能保存正值。您需要强制转换为已签名才能获得负值。

SELECT CAST(mynumber AS SIGNED) * -1 AS value

但是,如果 的值mynumber大于最大的正符号值(无符号值可以是相应有符号类型的两倍),则会溢出。

如果这只是为了显示,您可以简单地连接-字符:

SELECT CONCAT('-', mynumber) AS value

推荐阅读