加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 高效的SELECT查询在一个月内查找记录

发布时间:2020-12-13 14:09:09 所属栏目:PHP教程 来源:网络整理
导读:我有一个具有多个日期类型字段的 MySQL数据库表.我需要在这个表上执行不同的SELECT查询,但我不知道从哪个方面最好从同一个月查找记录. 我知道我可以做以下事情: SELECT * FROM table WHERE MONTH(somedate) = 5 AND YEAR(somedate) = 2015 但是我继续阅读这
我有一个具有多个日期类型字段的 MySQL数据库表.我需要在这个表上执行不同的SELECT查询,但我不知道从哪个方面最好从同一个月查找记录.

我知道我可以做以下事情:

SELECT *
  FROM table
 WHERE MONTH(somedate) = 5
   AND YEAR(somedate) = 2015

但是我继续阅读这是不高效的,我应该使用实际的日期,即

SELECT *
  FROM table
 WHERE somedate BETWEEN '2015-05-01' AND '2015-05-31'

然而,我所有的一切都是PHP和PHP中的变量.如果我用第二个选项,我如何轻松快速地计算一个月的最后一天?

不要计算一个月的最后一天.计算下个月的第一天.

你的查询可以这样

WHERE t.mydatetimecol >= '2015-05-01'
  AND t.mydatetimecol  < '2015-05-01' + INTERVAL 1 MONTH

请注意,我们做的不是比较,而不是“小于或等于”…这是比较TIMESTAMP和DATETIME列,这可以包括一个时间部分是非常方便的.

请注意,BETWEEN比较是“小于或等于”.要获得与上述查询相当的比较,我们需要做

WHERE t.mydatetimecol
      BETWEEN '2015-05-01' AND '2015-05-01' + INTERVAL 1 MONTH + INTERVAL -1 SECOND

(这假设DATETIME和TIMESTAMP的解析度降低了一秒,在其他数据库(如SQL Server)中,分辨率比一秒钟更精细,所以我们有可能丢失一行值为’2015 -05-31 23:59:59.997’我们没有这样的问题,比下个月比较的第一天比较…<'2015-06-01' 没有必要做自己的月或日数学,让MySQL为你做.如果你在这个月加1,你必须处理从12月到1月的翻牌,并增加一年. MySQL已经内置了所有内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读