mysql不是在datetime中存储微秒但在where where condition中使用?

时间:2018-02-19 17:31:23

标签: 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');

为什么这个查询没有结果?

select * from test where dt = '2018-02-19 17:21:51.321343';

所以我使用的是datetime而不是datetime(6)..微秒部分没有存储,为什么要进行比较呢?

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

由于

1 个答案:

答案 0 :(得分:0)

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

将没有微秒的时间与具有微秒的时间进行比较是错误的:

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位数。

重新评论。

这样想:你搜索一个值。您搜索的值不会存储在表格中。所以搜索失败了。这不合乎逻辑吗?