运算符之间的sqlite不返回db中的行

时间:2016-03-17 22:24:56

标签: sql sqlite

当我使用此查询时:

SELECT count(*) FROM verdicts WHERE Age BETWEEN 10 AND 20

我得到17行。但是当我使用这个查询时:

SELECT count(*) FROM verdicts WHERE Age BETWEEN 7 AND 20

我得到0行。我知道第二个查询应该捕获其他行。第二个查询应该捕获第一个查询捕获的所有行。有谁知道会发生什么?

age列包含几乎所有的ints,除了几个文本值,例如:

0-10,10-20等

这可能是我的问题吗?

1 个答案:

答案 0 :(得分:2)

我怀疑Age存储为字符串。这是一件糟糕的坏事。所以,你的比较真的是:

where Age between '7' and '20'

因为'7'大于'20',between不返回任何内容(较小的值首先出现)。

基本上,你可以用你的数据做很多事情。你应该真正修复数据格式。以下是可能性:

  • Age存储为数字。
  • 如果您要处理范围,请为MinAge和MaxAge设置数字列。
  • 如果您必须使用字符串,则将它们填零以使它们具有相同的长度:'007'而不是'7'

如果你做了最后一次,那么这将有效:

where Age between '007' and '028'