1

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

样本值:

$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

它不仅显示 2012 年 12 月 15 日的值,还显示 2012 年 12 月 16 日的值

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

4

2 回答 2

4

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

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

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

sqlize.com 上的演示

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

于 2012-12-29T21:50:41.993 回答
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)

在 sqlfiddle 中查看

于 2012-12-29T21:54:45.920 回答