0

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

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

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

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

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

从: 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 的一个很好的补充?

4

1 回答 1

1

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

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

于 2013-10-15T10:52:36.750 回答