MySQL WHERE子句用于过滤不到一小时的时间

时间:2015-01-15 13:34:14

标签: mysql mysqli phpmyadmin

SELECT 
    name,
    start_time,
    TIME(cancelled_date) AS cancelled_time,
    TIMEDIFF(start_time, TIME(cancelled_date)) AS difference
FROM
    bookings

我正试图从数据库中获取一个预订列表,这些预订在不到一小时的通知时被取消。开始时间和取消时间都是TIME格式,我知道时间戳会使这更容易。所以上面我已经计算了两个值之间的时间差,现在需要添加一个WHERE子句来限制它只有那些差异小于1:00:00的记录。显然这不是一个数字,这是一个时间,所以一点点的数学就不会这样做。

  • start_time是TIME

  • cancelled_date是DATETIME,但我在查询中将其转换为TIME,然后计算cancelled_time和差异。

有人可以帮忙吗?我会非常感激。

2 个答案:

答案 0 :(得分:2)

我倾向于通过在通知中添加和小时这样做:

WHERE start_time > date_add(cancelled_date, interval 1 hour)

我无法从问题中找出正确的逻辑,因为您的列名与描述不符。

在这种情况下,减法或进行比较的性能类似。但是,如果你有一个常数而不是cancelled_date,那么就会有所不同。以下内容:

WHERE start_time < date_add(now(), interval -1 hour)

允许引擎使用start_time上的索引。

答案 1 :(得分:1)

您可以使用having difference<time('1:00')