所以我有两个整数> 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?
答案 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 - 为什么不使用它?