Django:选择列的总和等于某个常数

2024-03-29 11:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我搜索了文档,但找不到一个简单的方法来运行这样的查询:

SELECT columns FROM table WHERE col_a + col_b = @param

我知道我可以使用.extra(where=['col_a + col_b = %s' % whatever]),但这不是参数化的。在

在ORM中有没有一种方法可以做到这一点(即没有extra)?否则,运行该查询的最干净的方法是什么?在


Tags: columns方法from文档参数paramormtable
5条回答

在爪哇

int myInt = 1;
byte b1,b2,b3;
b3 = (byte)(myInt & 0xFF);
b2 = (byte)((myInt >> 8) & 0xFF);
b1 = (byte)((myInt >> 16) & 0xFF);
System.out.println(b1+" "+b2+" "+b3);

输出0 0 1

byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;

我不确定这是如何在java中实现的,但我不是java开发人员

要获取最低有效字节,请执行以下操作:

b3 = myInt & 0xFF;

第二个最低有效字节:

b2 = (myInt >> 8) & 0xFF;

第三个最低有效字节:

b1 = (myInt >> 16) & 0xFF;

说明:

将一个值与0xFF(二进制中的11111111)按位ANDing将返回该数字中最低有效的8位(位0到7)。将数字向右移动8次将位8至15置于位0至7,因此与0xFF进行ANDing将返回第二个字节。类似地,将数字向右移动16次会将位16至23置于位0至7,因此与0xFF进行ANDing运算将返回第3个字节

整数不能放入3个字节。但是,假设您知道这些特定的:

   byte b1 = (myInt & 0xff);
   myInt >>= 8;
   byte b2 = (myInt & 0xff);
   myInt >>= 8;
   byte b3 = (myInt & 0xff);

如果是正整数值,Jeremy的答案是正确的。如果对于负值,转换应该是正确的,那么由于二的补码格式(https://en.wikipedia.org/wiki/Two%27s_complement),转换就稍微复杂一些。诀窍是消除感兴趣的位(低有效位)和“符号”位之间的间隙。一个简单的方法是数的乘法

    int myIntMultiplied = myInt * 256;

    byte b1, b2, b3;

    b3 = (byte) ((myIntMultiplied >> 8) & 0xFF);
    b2 = (byte) ((myIntMultiplied >> 16) & 0xFF);
    b1 = (byte) ((myIntMultiplied >> 24) & 0xFF);

这将为负值提供正确的补码格式

PS:您可以通过以下方式检查和比较二进制表示:

Integer.toBinaryString(myInt);
Integer.toBinaryString(myIntMultiplied );

相关问题 更多 >