Как инвертировать int без знака?

#mysql

Вопрос:

Я использую тип данных da bigint без знака в MySQL 5.7 и хочу вывести перевернутое значение с помощью запроса. Таким образом, 30 становится -30.

   SELECT
    mynumber * (- 1) as value
 

Это возвращает ошибку:

 Data truncation: BIGINT UNSIGNED value is out of range 
 

Как это можно сделать без изменения типа данных?

Комментарии:

1. Я говорю о отображении, а не о сохранении.

Ответ №1:

Без знака могут содержаться только положительные значения. Вам нужно привести к знаку, чтобы получить отрицательное значение.

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

Однако это приведет к переполнению, если значение mynumber больше, чем наибольшее положительное значение со знаком (значения без знака могут быть в два раза больше, чем соответствующие типы со знаком).

Если это только для отображения, вы можете просто объединить - символ:

 SELECT CONCAT('-', mynumber) AS value