BIGINT UNSIGNED value is out of range

Q_BASIC

Хранитель порядка
Регистрация
30 Ноя 2013
Сообщения
516
Реакции
1.240
Приветствую,

Есть такой запрос:
Код:
SELECT
    round((`unsuccess_time`-`success_time`) / 60) as x,
    COUNT(*) as y
FROM `sites`
WHERE
    `success_time`>0
GROUP BY x
Запрос выдает ошибку
Код:
#1690 - BIGINT UNSIGNED value is out of range in '(`unsuccess_time` - `success_time`)'
Без GROUP BY ошибки нет.

Поля unsuccess_time и success_time INT(11) UNSIGNED, в них хранится unix time

По ответам тут Для просмотра ссылки Войди или Зарегистрируйся пытался как-то исправить ситуацию, но никак не получилось, хотя в итоге уже везде поставил CAST

Как выполнить запрос без ошибок?
 
да вы уже ответили (наверное не подозревая об этом) на свой вопрос, Unsigned тип не может быть в минусе. У ним минимум это 0. А при вычитании unsuccess_time - success_time у вас скорее всего получается значение меньше нуля. Или измените поля на SIGNED или проверяйте вычитание...
 
This is the solution from the post in Для просмотра ссылки Войди или Зарегистрируйся To generalise the rule, MySQL will now refuse to substract an UNSIGNED operand from a SIGNED one.
Example : SELECT A - B; will fail if A is SIGNED whereas B is UNSIGNED.
Workarounds: Add 1.0 factor to the signed operand, so it implicitly casts it to FLOAT, or use CAST (B AS SIGNED), or even swap (B - A) and change the algorithm accordingly. This works for me.
 
Назад
Сверху