PostgreSQL中数字之间的异或

时间:2011-03-28 19:23:01

标签: sql postgresql integer biginteger unsigned

所以我有两个整数> 2 ^ 63 - 1但是< 2 ^ 64 -1。这是大多数语言中的BIGINT UNSIGNED,但是根据Comparison of database column types in MySQL, PostgreSQL, and SQLite? (Cross-Mapping),它在postogresql中的数字(20)

问题是,当我尝试在两个unsigned bigints之间进行postgresql xor操作时:

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

=>

ERROR:  operator does not exist: numeric # numeric

任何非“数字”整数小于2 ^ 63 -1,它都可以正常工作。

rephrase:如何在两个大于2 ^ 63-1但小于2 ^ 64-1的数字之间执行XOR运算?防爆。我怎样才能在PostgreSQL中对自己进行XOR 17418945696623429624?

2 个答案:

答案 0 :(得分:1)

根据PostgreSQL documentation

  

按位运算符仅适用于   积分数据类型,而   其他可用于所有数字   数据类型。

数字属于Arbitrary Precision Numbers(不是Integer Types),因此XOR运算符不起作用。

有(仅签名)bigint整数类型,但它只有-2 ^ 63到2 ^ 63 - 1.不幸的是没有无符号bigint数据类型(即0到2 ^ 64 -1)。

我认为可以使用bigint数据类型和一些“按位魔法”来实现这样的计算。

答案 1 :(得分:1)

看起来像PostgreSQL has a bigint type - 为什么不使用它?