我有一个数据库,我希望得到日期。我的代码是
SELECT * FROM `cdr`
WHERE BETWEEN calldate LIKE '2014-08-28%'
AND LIKE '2014-08-27%'
但不起作用......
我试过了:
SELECT * FROM `cdr`
WHERE BETWEEN calldate '2014-08-28%
AND '2014-08-27'
但没有奏效,因为该栏目是y.m.d - h.m.s
有人帮助我吗?感谢
答案 0 :(得分:2)
您可以通过提供硬编码时间开始/结束值
在Sargable way
中编写查询
SELECT * FROM `cdr`
where calldate between '2014-08-27 00:00:00' and '2014-08-28 11:59:59'
答案 1 :(得分:0)
where foo between bar and baz
相当于
WHERE (foo >= bar) AND (foo <= baz)
从未有过,也永远不会有能力进行LIKE
比较。您可以 NOT 使您的查询无法工作。
同样,你正试图向后做。它是foo BETWEEN lower_value AND higher_value
。
你需要的只是
WHERE calldate BETWEEN '2014-08-27' AND '2014-08-28'
答案 2 :(得分:0)
我建议在日期避免使用between
,尤其是在有时间值时。这是一种方法:
SELECT *
FROM `cdr`
WHERE calldate >= date('2014-08-27') and
calldate < date('2014-08-27') + interval 1 day;
所有函数都在常量上,因此该查询可以使用cdr(calldate)
上的索引。
答案 3 :(得分:0)
试试这个:
SELECT * FROM `cdr` WHERE `calldate` BETWEEN '2014-08-09%' AND '2014-08-10%'
注意:BETWEEN的第1个字符串应该小于第2个字符串。