我在PostgreSQL中有2个简单的表。
表1(将数字保存在Varchar中):
class Numbers_char_model(models.Model):
number = models.CharField(max_length=256, blank=True, null=True)
表2(将数字保存为整数):
class Numbers_int_model(models.Model):
number = models.IntegerField(blank=True, null=True)
两个表中的数据相同。
id number
1 -> 0
2 -> 20
3 -> 40
4 -> 70
5 -> 110
6 -> 150
当我点击以下查询时,它们都会给出不同的结果。
def number_query(request):
ax_int = Numbers_int_model.objects.filter(number__lte='20')
ax_char = Numbers_char_model.objects.filter(number__lte='20')
ax_int 输出-> 0.20
ax_char 输出-> 0,20,110,150
有人可以清除吗?
答案 0 :(得分:1)
这是因为int比较和字符串比较不相同。字符串比较适用于每个字符到字符。在这里,对于您的情况,四个字符串的第一个字符为'0','2','1','1'。 2比所有的都大。所以这种类型的输出。
对于这种情况,首先我们需要将number字段强制转换为int,然后执行此操作。 extra
link
Numbers_char_model.objects.extra({'number': "CAST(number as INT)"}).filter_by(number__lte=20)
参考:link
答案 1 :(得分:0)
Numbers_char_model
有一个CharField
。您不能小于或等于字符串。 Numbers_int_model
之所以有效,是因为Django ORM将字符串'20'
转换为int。
答案 2 :(得分:0)
您可以将不带int main()
{
char poste[] ={'P', 'P', 'O', 'A', 'P', 'A', 'P', 'P'};
int nbCafe[] ={5, 1, 3, 0, 5, 1, 0, 2};
int age[] ={25, 19, 27, 22, 49, 24, 60, 29};
int nbPers = sizeof(age) / sizeof(int);
int i;
int ageProgMax = 0;
for (i = 0; i < nbPers; i++)
{
if (poste[i] =='P' && (age[i] > ageProgMax))
{
ageProgMax = age[i];
}
}
printf ("Max age of programmers : %d\n", ageProgMax);
return 0;
}
(不推荐使用)的字符串强制转换为int。以下内容应能为您带来预期的结果(尽管使用IntegerField显然更明智):
extra