我正在建立一个查询,以按时间戳列值搜索表。我传递给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';
答案 0 :(得分:2)
这里的问题是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
,即 false
要处理此问题,您可以在日期(过滤器中的 date_to )添加一天,然后使用<
运算符进行范围检查。
SELECT
count(*)
FROM
contact
WHERE
created_at >= '2018-10-10'
AND created_at < ('2018-10-10' + INTERVAL 1 DAY);