我尝试使用此SQL查询获取总行数,结果应为= 1
SELECT COUNT(id) FROM offer_process WHERE uid = 103 AND date = '2014-08-20'
在这种情况下,我并不确切知道如何从日期(2014-08-20)获取行总数。
答案 0 :(得分:4)
您有一个datetime
列
要仅查看date
部分,请使用DATE() MySQL function
SELECT COUNT(id) FROM offer_process WHERE uid = 103 AND DATE(date) = '2014-08-20'
此外,如果您的date
字段中有索引,则应避免使用DATE/TIME
MySQL函数。相反,您可以使用WHERE date LIKE '2014-08-20%'
来获得更好的效果
答案 1 :(得分:3)
你可以试试这个:
SELECT COUNT(id) FROM offer_process WHERE uid = 103
AND DATE_FORMAT(`date`, "%Y-%m-%d") = '2014-08-20'
或者您可以尝试使用日期
SELECT COUNT(id) FROM offer_process
WHERE uid = 103 AND date(`date`) = '2014-08-20'
答案 2 :(得分:3)
您的日期有时间部分。使用日期常量时,将其视为午夜。 MySQL具有函数date()
来仅提取日期组件:
SELECT COUNT(id)
FROM offer_process
WHERE uid = 103 AND date(date) = '2014-08-20'
答案 3 :(得分:2)
要利用您在日期字段中可能使用的索引:
select count(id)
from offer_process
where date like '2014-08-20%'
and uid = 103
如果对应用了函数的列使用条件,并且索引位于列本身上,则无法再使用该索引。
IE中。使用
DATE(date) = '2014-08-20'
会导致性能下降。 (如果数据集很大,并且您适当地将该字段编入索引)。
<强>小提琴:强> http://sqlfiddle.com/#!9/0e62b/3/0
从执行计划中可以看出,在较大的数据集中,对日期字段建立索引,您可以获得性能增益,因为可以依赖索引。如果您的标准不在该字段上,而是在针对该字段应用的函数的结果上,则不能使用日期字段上的索引。
答案 4 :(得分:1)
尝试使用DATE函数仅比较日期组件:
AND DATE(date) = '2014-08-20'