我有这个架构
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
由于
答案 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位数。
重新评论。
这样想:你搜索一个值。您搜索的值不会存储在表格中。所以搜索失败了。这不合乎逻辑吗?