运行 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() 会有所作为?我原以为日期和字符串格式之间的转换是双射的,不应该影响计算,但似乎确实如此。为什么只是合并会对是否找到非空记录产生影响?