我有一个MySQL DB表,有多个日期类型字段.我需要在此表上执行不同的SELECT查询,但我不确定哪个方法最适合在同一个月查找记录.
我知道我可以做到以下几点:
SELECT *
FROM table
WHERE MONTH(somedate) = 5
AND YEAR(somedate) = 2015
Run Code Online (Sandbox Code Playgroud)
但是我一直在阅读那些效率不高的内容,我应该使用实际日期,即
SELECT *
FROM table
WHERE somedate BETWEEN '2015-05-01' AND '2015-05-31'
Run Code Online (Sandbox Code Playgroud)
但是,我所拥有的只是来自PHP的变量的月份和年份.如果我选择第二个选项,如何轻松快速地计算当月的最后一天?
spe*_*593 10
不要计算一个月的最后一天.改为计算下个月的第一天.
您的查询可以是这样的
WHERE t.mydatetimecol >= '2015-05-01'
AND t.mydatetimecol < '2015-05-01' + INTERVAL 1 MONTH
Run Code Online (Sandbox Code Playgroud)
请注意,我们做的不是比较,而不是"小于或等于"...这对于比较TIMESTAMP和DATETIME列非常方便,这些列可以包括时间部分.
注意,BETWEEN
比较是"小于或等于".要获得与上述查询等效的比较,我们需要这样做
WHERE t.mydatetimecol
BETWEEN '2015-05-01' AND '2015-05-01' + INTERVAL 1 MONTH + INTERVAL -1 SECOND
Run Code Online (Sandbox Code Playgroud)
(这假设分辨率为DATETIME
和TIMESTAMP
秒.在其他数据库中,例如SQL Server,分辨率比一秒钟更精细,因此我们有可能错过价值为'2015-05的行-31 23:59:59.997'.我们没有像下一个月的第一天比较那样的问题......< '2015-06-01'
不需要自己做月或日数学,让MySQL为你做.如果您在月份中添加1,则必须处理从12月到1月的翻转,并增加年份.MySQL已经内置了所有内容.
归档时间: |
|
查看次数: |
558 次 |
最近记录: |