mysql不在日期时间中存储微秒,但在where条件下使用?

标签 mysql datetime

我有这个架构

CREATE TABLE `test` (
  `id` int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `dt` datetime NOT NULL
) ENGINE='InnoDB';

INSERT INTO `test` (`dt`) VALUES ('2018-02-19 17:21:51.321343');

为什么此查询没有结果?

从测试中选择*,其中 dt = '2018-02-19 17:21:51.321343';

所以我使用的是日期时间而不是日期时间(6)..微秒部分没有存储,为什么要比较它?

http://sqlfiddle.com/#!9/bed0c3/3

谢谢

最佳答案

您的查询没有结果,因为您正在将表中存储的值与不同的值进行比较。它们不匹配,因此搜索表达式错误。

没有微秒的时间与有微秒的时间的比较是错误的:

mysql> select '2018-02-19 17:21:51' = '2018-02-19 17:21:51.321343' as is_equal;
+----------+
| is_equal |
+----------+
|        0 |
+----------+

就像pi和整数之间的比较是错误的一样:

mysql> select 3.1415927 = 3 as is_equal;
+----------+
| is_equal |
+----------+
|        0 |
+----------+

您可以通过将小数日期时间值转换为不带毫秒的值来解决此问题:

mysql> select '2018-02-19 17:21:51' = cast('2018-02-19 17:21:51.321343' as datetime) as is_equal;
+----------+
| is_equal |
+----------+
|        1 |
+----------+

转换为datetime 与转换为datetime(0) 相同。即秒小数位的 0 位。

<小时/>

回复您的评论。

这样想:您搜索一个值。您搜索的值未存储在表中。所以搜索失败。这不符合逻辑吗?

关于mysql不在日期时间中存储微秒,但在where条件下使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871305/

相关文章:

php - 使用单服务器进行网站开发的 Git

php - 如何使用 PDO 扩展绑定(bind) LIKE 值?

php - 在 1 个 MySQL 查询中使用 select 语句和 php 变量插入

MySQL 和子查询不返回结果

Python:将 ('Monday' 、 'Tuesday' 、 'Wednesday' ) 转换为 'Monday to Wednesday'

mysql - 选择联合查询?

r - 在 R 中转换为一年中的日期和时间

PHP 日期格式、删除时间等

php - Doctrine 中的日期格式

mysql触发器自动完成可变日期