XOR между числами в PostgreSQL - PullRequest
       50

XOR между числами в PostgreSQL

1 голос
/ 28 марта 2011

Итак, у меня есть два целых числа> 2 ^ 63 - 1, но <2 ^ 64 -1. Это BIGINT UNSIGNED на большинстве языков, но согласно <a href="/1215151/sravnenie-tipov-stolbtsov-bazy-dannyh-v-mysql-postgresql-i-sqlite-kross-kart"> Сравнение типов столбцов базы данных в MySQL, PostgreSQL и SQLite? (Cross-Mapping) , его числовое значение (20) в postogresql

Проблема в том, что когда я пытаюсь выполнить операцию postgresql xor между двумя неподписанными значками:

select 17418945696623429624::numeric(20) # 17418945696623429624::numeric(20);

=>

ERROR:  operator does not exist: numeric # numeric

с любым не "числовым" целым числом, меньшим 2 ^ 63 -1, он работает нормально.

перефразировать: как я могу выполнить операцию XOR между двумя числами больше 2 ^ 63 - 1, но меньше 2 ^ 64 - 1? Ex. Как я могу XOR 17418945696623429624 с собой в PostgreSQL?

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Похоже, PostgreSQL имеет тип bigint - почему бы вам не использовать это?

1 голос
/ 28 марта 2011

Согласно документации PostgreSQL :

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

число принадлежит произвольным точным числам (не целочисленные типы ), поэтому оператор XOR не работает.

Существует (только со знаком) целочисленный тип bigint, ноэто только от -2 ^ 63 до 2 ^ 63 - 1. К сожалению, нет неподписанного типа данных bigint (т. е. от 0 до 2 ^ 64 -1).

Я думаю, что можно было бы реализовать такие вычисления с помощью bigintтип данных с некоторой «побитовой магией».

...