MySQL仅按日期搜索时间戳列



我正在构建一个查询,以按时间戳列值搜索表。我传递给api的一个格式示例是2018-10-10。用户可以选择日期范围。通常,日期范围的开始日期是2018-10-10,结束日期是同一天,2018-10-10。以下内容似乎不起作用。在不需要指定时间的情况下,最简单的方法是什么?很明显,我想查询2018-10-10从开始到结束的一整天。

SELECT
count(*)
FROM
contact
WHERE
created_at >= '2018-10-10'
AND created_at <= '2018-10-10';

这里的问题是Timestamp数据类型也将具有HH:MM:SS(时间(值。在比较日期时间和日期时,MySQL会自动将00:00:00假定为日期值的HH:MM:SS

因此,2018-10-10 12:23:22将不匹配以下条件:created_at <= '2018-10-10';因为它将被处理为:2018-10-10 12:23:22 <= '2018-10-10 00:00:00,这是错误

要处理此问题,可以在日期中添加一天(过滤器中的date_To(,并使用<运算符进行范围检查。

SELECT
count(*)
FROM
contact
WHERE
created_at >= '2018-10-10'
AND created_at < ('2018-10-10' + INTERVAL 1 DAY);

最新更新