SQL语句如何精准查找某一时间段的数据

举报
SHQ5785 发表于 2022/08/11 14:14:45 2022/08/11
【摘要】 在项目开发过程中,自己需要查询出一定时间段内的交易。故需要在sql查询语句中加入日期时间要素,sql语句如何实现?      SELECT * FROM lmapp.lm_bill where tx_time Between '2015-12-20' And '2015-12-31';      仔细研究还是能够发现一些细节性的问题的。      SQL语句1      SELECT * F...

在项目开发过程中,自己需要查询出一定时间段内的交易。故需要在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 来防止误操作。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。