我有SQLite数据库,其中包含包含日期的表。我想要选择落在特定范围内的记录,但我没有写出正确的查询。
# This query returns nothing
rows = model.select().where(
(model.date.between(start_date, end_date)) &
(model.name == point_name)
).tuples()
# This query returns nothing too
rows = model.select().where(
(model.date > start_date) &
(model.date < end_date) &
(model.name == point_name)
).tuples()
# However tis one works:
rows = model.select().where(
(model.date > start_date) &
(model.name == point_name)
).tuples()
当我尝试查询日期范围时,为什么我的代码在查询日期比在给定日期或者小于给定日期时有效?
答案 0 :(得分:5)
您如何在数据库中存储日期?这是一个预先存在的数据库,还是您使用Peewee插入所有记录?我问,因为SQLite可以将日期表示为字符串或数字(时间戳)。如果你使用字符串,那么日期必须按字典顺序排序以进行有意义的比较......这就是为什么Peewee使用YYYY-mm-dd。
如果您的日期排序正确,那么如果您想要包含端点,则应该可以使用.between()
。否则你可以(date_field > low) & (date_field < high)