我正在使用Python34来处理MySQL数据库,该数据库具有具有sent_time
和delivered_time
列的表。我正在尝试获取两个日期时间输入之间的所有订单,但我只让脚本查看sent_time
,而不是sent_time
和delivered_time
。
因此,换句话说,我希望找到所有已发送的对象,正在交付或在给定时间范围内交付。
query = (
"SELECT sent_time, delivered_time, OBJ, id1, id2 FROM table1 "
"WHERE sent_time BETWEEN %s AND %s"
)
userIn = dateutil.parser.parse(input('start date:'))
userEnd = dateutil.parser.parse(input('end date:'))
我尝试将查询更改为WHERE sent_time or delivered_time BETWEEN %S AND %s
,但这只返回整个表。
有什么建议吗?
SQL语法为:
WHERE sent_time BETWEEN %s AND %e
OR delivered_time BETWEEN %s AND %e
s 表示开始,e 表示结束,这两个点都包含在结果中。
或者,也许可以满足您的需求:
WHERE %s between sent_time and delivered_time
虽然并非所有人都清楚,但使用 BETWEEN 对于日期范围是有问题的,最佳做法是将>= 与 <一起使用。>
例如,要获得 2015 年的所有内容,但绝对不会获得该年之后(或之前)的所有内容,然后:
select * from sometable
where datecolumn >= '2015-01-01' and datecolumn < '2016-01-01'
无论数据精度如何(天?秒?毫秒?),该构造都将是准确的
您还必须为delivered_time字段添加额外的 between 条件:
query = (
"SELECT sent_time, delivered_time, OBJ, id1, id2 FROM table1 "
"WHERE (sent_time BETWEEN %s AND %s) OR (delivered_time BETWEEN %s AND %s)"
)
您需要确定是否需要or
或and
来组合这两个标准。我从这个问题上不清楚。