【问题标题】:MySQL internal date to datetime convertion. PHP (Zend Framework 1.11) as middlewareMySQL 内部日期到日期时间的转换。 PHP (Zend Framework 1.11) 作为中间件
【发布时间】:2013-10-23 03:24:40
【问题描述】:

所以我想知道我是否遇到了一个或多或少明显的问题。

假设我们有一个名为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

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

从: 2013-10-10 到: 2013-10-16 一切正常。

但是用这样的表达式: From: 2013-10-15 To: 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 内部日期/日期时间转换(低级操作)的信息?

这个问题是否可以作为社区 wiki 的一个很好的补充?

【问题讨论】:

    标签: mysql zend-framework mysqli php-5.2


    【解决方案1】:

    如果未设置时间部分,则将此类 DATE 转换为 DATETIME/TIMESTAMP 将导致将其时间部分填充为 00:00:00 - 这是正常行为(如 here 所述)。

    要让它工作 - 你需要明确指定你的时间部分 2013-10-15 00:00:00 直到 2013-10-15 23:59:59

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-12
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多