【问题标题】:get values from table only for a specific day in mysql仅在 mysql 中从表中获取特定日期的值
【发布时间】:2012-12-29 21:29:33
【问题描述】:

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

样本值:

$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 日

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

【问题讨论】:

  • 我建议将您的日期存储为时间戳,以便更容易搜索和操作。
  • 你确定吗?不可能。
  • 使用select * from dates where date1 <= date2

标签: php mysql date time between


【解决方案1】:

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

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

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

(demo on sqlize.com)

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

【讨论】:

  • 我认为他想要查询to and from 对于两者,完全相同的日期和介于两者之间的日期。 Like 仅适用于完全相同的日期。所以我猜他可以通过使用<= 运算符(使用字符串到日期函数)得到他的结果
  • @softgenic:也许,如果是这样,他真的应该使用DATETIME 列(或者,至少,ISO-style date formatting)。但他所有的例子都显示了单日。
【解决方案2】:

假设您将日期存储为日期时间字段,您应该将数据转换为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

【讨论】:

  • 这就是我在说的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2015-04-24
  • 1970-01-01
相关资源
最近更新 更多