MySQL Coalesce date 缺少结果,为什么?

Mr *_*ner 0 mysql date coalesce mysql-8.0

运行 MySQL 8.0.16,据我所知,设置保留为默认值。

我有一张桌子,我们称之为 the_table,有列

id: bigint 主键 auto_increment

the_time:日期时间

我有一个记录,the_time 为 2019-12-19 00:00:00。

当我运行

SELECT id, the_time 
FROM the_table 
WHERE the_time BETWEEN '2019-12-19' AND '2019-12-19';

SELECT id, the_time 
FROM the_table 
WHERE COALESCE(the_time, DATE('9999-1-1')) BETWEEN '2019-12-19' AND '2019-12-19';
Run Code Online (Sandbox Code Playgroud)

我得到那个记录。然而,随着

SELECT id, the_time 
FROM the_table 
WHERE COALESCE(the_time, '9999-1-1') BETWEEN '2019-12-19' AND '2019-12-19';
Run Code Online (Sandbox Code Playgroud)

我没有,虽然将其更改为

SELECT id, the_time 
FROM the_table 
WHERE COALESCE(the_time, '9999-1-1') BETWEEN '2019-12-18' AND '2019-12-20';
Run Code Online (Sandbox Code Playgroud)

我突然又做了。为什么 MySQL 会这样?为什么额外的 DATE() 会有所作为?我原以为日期和字符串格式之间的转换是双射的,不应该影响计算,但似乎确实如此。为什么只是合并会对是否找到非空记录产生影响?

小智 5

因为它将日期时间转换为字符串并与字符串值进行比较。并且'2019-12-19 00:00:00' <= '2019-12-19'在文本比较中为假。