Операции логического сдвига для bigint на 64-битной платформе

Приветствую!
Установлен 64-битный PostgreSQL 9.1 на Windows 7 (64-bit).

Выполняю запрос следующего вида:

SELECT (1<<48)+(1<<32)+(1<<16)+1 AS "Test";
>131074

Получаю результат 131074, что не есть правда.

При этом другие операции с "большими" числами проходят неплохо:

SELECT 281479271743489 + 65535;
>281479271809024

Самое интересное, что 32-битный MySQL ту же самую операцию логического сдвига выполняет правильно, возвращая значение 281479271743489.

Как быть, если требуется данный функционал на PostgreSQL?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Решение найдено: SELECT

Решение найдено:
SELECT (int8(1)<<48)+(int8(1)<<32)+(int8(1)<<16)+int8(1) AS "Test";

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023