MySQL仅按日期搜索时间戳列

时间:2018-11-21 18:42:51

标签: 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';

1 个答案:

答案 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);