gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:31:35 25 4
gpt4 key购买 nike

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

假设我们有一个名为 dateField 的数据库字段,它位于日期时间中。我们还假设表中的所有记录都具有以下值:2013-10-15 13:15:46

现在我们想要提取某个日期范围内的记录。我们在网站前端使用 2013-10-15 (yyyy-mm-dd) 格式。 (不,SQL 注入(inject)是不可能的。它通过 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 内部日期/日期时间转换(低级操作)的更多信息吗?

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

最佳答案

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

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

关于MySQL 内部日期到日期时间的转换。 PHP (Zend Framework 1.11) 作为中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com