gpt4 book ai didi

MySQL 在 DATETIME 列上加入/比较(<5.6.4 和 > 5.6.4)

转载 作者:可可西里 更新时间:2023-11-01 06:33:28 25 4
gpt4 key购买 nike

假设我有两个这样的表:

Events
ID (PK int autoInc), Time (datetime), Caption (varchar)

Position
ID (PK int autoinc), Time (datetime), Easting (float), Northing (float)

例如,如果我使用 Time 字段作为我的加入条件,列出所有事件及其位置是否安全?即:

SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time

或者,甚至只是简单地比较日期时间值(考虑到参数化值可能包含小数秒部分 - MySQL 一直接受)例如

SELECT E.* FROM Events E WHERE E.Time = @Time

我了解 MySQL(5.6.4 版之前)只存储没有毫秒的日期时间字段。所以我假设这个查询可以正常运行。然而,从 5.6.4 版开始,我读到 MySQL 现在可以使用日期时间字段存储毫秒数。

假设使用诸如 NOW() 之类的函数插入日期时间值,毫秒将被截断 (<5.6.4),我假设这允许上述查询工作。但是,对于 5.6.4 及更高版本,这可能无法正常工作。 我现在并且永远只会对秒精度感兴趣。

如果有人能回答以下问题,我们将不胜感激:

  1. 一般来说,MySQL 如何将日期时间字段相互比较(考虑上面的查询)。
  2. 上面的查询是否正常,是否在时间上使用了索引字段? (MySQL < 5.6.4)
  3. 有什么方法可以排除毫秒吗? IE。当插入和在条件连接/选择等? (MySQL > 5.6.4)
  4. 上面的连接查询是否有效? (MySQL > 5.6.4)

编辑

我知道我可以转换日期时间,感谢那些回答的人,但我试图在这里解决问题的根源(存储类型/定义已更改的事实)并且我不想使用在我的查询中起作用。这否定了我所有优化查询应用索引等的工作,更不用说必须重写我的所有查询了。

EDIT2

有人能提出不使用秒级精度加入 DATETIME 字段的理由吗?

最佳答案

似乎 MySQL 开发人员不想破坏向后兼容性,因此要使用毫秒,您必须明确更改表、sql 等才能使用此功能:

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_now

NOW([fsp])

As of MySQL 5.6.4, if the fsp argument is given to specify a fractional seconds precision from 0 to 6,the return value includes a fractional seconds part of that many digits. Before 5.6.4, any argument is ignored.

http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html

MySQL 5.6.4 and up expands fractional seconds support for TIME, DATETIME, and TIMESTAMP values, with up to microseconds (6 digits) precision:

To define a column that includes a fractional seconds part, use the syntax type_name(fsp), where type_name is TIME, DATETIME, or TIMESTAMP, and fsp is the fractional seconds precision. For example:

CREATE TABLE t1 (t TIME(3), dt DATETIME(6)); The fsp value, if given, must be in the range 0 to 6. A value of 0 signifies that there is no fractional part. If omitted, the default precision is 0. (This differs from the standard SQL default of 6, for compatibility with previous MySQL versions.)

关于MySQL 在 DATETIME 列上加入/比较(<5.6.4 和 > 5.6.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11132067/

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