SQL语句如何精准查找某一时间段的数据
在项目开发过程中,自己需要查询出一定时间段内的交易。故需要在sql查询语句中加入日期时间要素,sql语句如何实现?
SELECT * FROM lmapp.lm_bill where tx_time Between '2015-12-20' And '2015-12-31';
仔细研究还是能够发现一些细节性的问题的。
SQL语句1
SELECT * FROM lmapp.lm_bill where merch_uid='S18853883587' AND tx_time Between '2015-09-17' AND '2015-10-27 24:00:0';
查询结果1
SQL语句2
SELECT * FROM lmapp.lm_bill where merch_uid='S18853883587' AND tx_time Between '2015-09-17 0:00:0' AND '2015-10-27 24:00:0';
查询结果2
SQL语句3
SELECT * FROM lmapp.lm_bill where merch_uid='S18853883587' AND tx_time Between '2015-09-17' AND '2015-10-27';
查询结果3
通过对比,可以清楚的发现以上3种sql语句所对应的查询结果均不相同。
若自己想只以日期为查询条件而忽略时间,则需要对sql语句做进一步的处理操作。
数据库中数据存储情况:
由此可见SQL语句1为满足条件的查询语句。
拓展阅读 mysql批量删除大量数据
假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock wait timeout exceed的错误。
因为这条语句所涉及的记录数太多,因此我们通过LIMIT参数分批删除,比如每10000条进行一次删除,那么我们可以利用 MySQL这样的语句来完成:
DELETE FROM syslogs WHERE status=1 ORDER BY statusid LIMIT 10000;
然后分多次执行就可以把这些记录成功删除。
注:
执行大批量删除的时候注意要使用上limit。因为如果不用limit,删除大量数据很有可能造成死锁。
如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据库。
平时update和delete的时候最好也加上limit 1 来防止误操作。
- 点赞
- 收藏
- 关注作者
评论(0)