我有这个架构
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/