从表中获取值仅在mysql中的特定日期

时间:2012-12-29 21:29:34

标签: php mysql date time between

我无法获取特定日期的数据库中的值

样本值:

$from= 12/15/2012 $to= 12/15/2012
$from= 12/16/2012 $to= 12/16/2012
$from= 12/17/2012 $to= 12/17/2012

php脚本:

$query=" select * from call where (date_time BETWEEN '$from' AND '$to') ORDER BY date_time DESC";

我的桌子上的价值是我的约会时间在其中

我数据库中的ex值:

12/15/2012 2:51
12/15/2012 2:21
12/15/2012 2:55
12/15/2012 3:12
12/16/2012 2:51
12/16/2012 2:21
12/17/2012 2:55
12/17/2012 3:12

当我搜索from 12/15/2012 to 12/15/2012时 它不显示

的值
12/15/2012

但如果我搜索

来自12/15/2012 to 12/16/2012

它不仅显示值 12/15/2012但也适用于12/16/2012

我该怎么做才能将所有值仅包含在特定日期?

2 个答案:

答案 0 :(得分:4)

首先,您应该将时间值存储在DATETIME(或可能TIMESTAMP)列中。然后按照this question给出的答案。

但是,如果确实坚持使用字符串执行此操作,则可以始终使用LIKE比较:

SELECT * FROM `call` WHERE date_time LIKE '12/15/2012 %'

demo on sqlize.com

当然,这仅适用于查找一天的所有记录(或通过适当修改,一小时/分钟/月/年/等)。如果您需要更复杂的选择标准,我强烈建议您切换到真正的DATETIME列。

答案 1 :(得分:3)

假设您将日期存储为日期时间字段,则应将数据转换为Date类型。

当你写:

$from= 12/15/2012

PHP做分工:12/15然后(12/15)/ 2012

方法将$from声明为字符串并在查询中转换为日期:

$from= '12/15/2012'
...
"select * from call where (date_time BETWEEN STR_TO_DATE('$from', '%m/%d/%Y') ..."

索引友好计划的正确查询是:

select * 
from   `call` 
where  date_time >= STR_TO_DATE('$from', '%m/%d/%Y') and 
       date_time < date_add( STR_TO_DATE('$to', '%m/%d/%Y'), interval 1 day)

See it in sqlfiddle