MySQL内部日期到datetime转换。 PHP(Zend Framework 1.11)作为中间件

时间:2013-10-15 10:46:11

标签: mysql zend-framework mysqli php-5.2

所以我想知道如果我遇到了应该或多或少明显的问题。

因此,假设我们有一个名为dateField的数据库字段,该字段位于日期时间内。让我们假设表中的所有记录都有这个值:2013-10-15 13:15:46

现在我们想要提取日期范围内的记录。我们在网站前端使用2013-10-15(yyyy-mm-dd)格式。 (不,SQL注入是不可能的。它通过PDO。:D)

让我们假设select语句的where语句是这样插入的: $ select-> where(' dateField> =?',$ dateFrom); $ select-> where(' dateField< =?',$ dateTo);

所以当我们有这样的范围时:

来自: 2013-10-10 收件人: 2013-10-16 一切正常。

但是有这样一个表达式: 来自: 2013-10-15 收件人: 2013-10-15 它没有显示任何结果! :d

我猜MySQL 内部转换我的日期类型 2013-10-15 2013-10-15 00:00:00 我的WHERE子句变为:

SELECT .... WHERE dateField <= 2013-10-15 00:00:00 AND dateField >= 2013-10-15 00:00:00;

当然在这种情况下 2013-10-15 13:15:46 不在我的WHERE子句中。 :D:D

我已经通过比较以下日期部分来解决这个问题:

$select->where('DATE(dateField) >= ?', $dateFrom);
$select->where('DATE(dateField) <= ?', $dateTo);

但我的问题是:

有人可以解释一下MySQL内部日期/日期时间转换(低级别操作)吗?

这个问题是否有资格成为社区维基的一个很好的补充?

1 个答案:

答案 0 :(得分:1)

如果没有设置时间部分,那么将这样的DATE转换为DATETIME / TIMESTAMP将导致它的时间部分填充为00:00:00 - 这是正常行为(如描述here)。

要使其正常运作,您需要明确指定时间部分2013-10-15 00:00:00直到2013-10-15 23:59:59