如何检查CURTIME()是否处于两次不同的时间?

时间:2013-05-31 19:18:38

标签: mysql time between

我正在尝试使用MySQL进行时间检查以查看当前时间是否介于2个给定时间戳之间。

我想要做的是,如果设置的通知范围介于2个给定时间戳之间,则生成通知列表。

所以,如果有人说在'18:00:01'和'07:59:59'之间通过TXT消息通知我,那么请通过EMAIL BETWEEN '18:00:01'和'07:59:59'通知我。

这就是我所做的。

所以我尝试了以下(假设当前时间是17:00:00)

SELECT CURTIME() BETWEEN '08:00:00' AND '18:00:00' //this retured 1 which is correct

但是,当我尝试以下时(假设当前时间是19:00:00)

SELECT CURTIME() BETWEEN '18:00:01' AND '07:59:59'  //this return 0

这是我当前的查询

 SELECT DISTINCT
TRIM(su.first_name) AS name,
CASE WHEN n.notification_method = "SMS" THEN 
CASE WHEN cc.gateway IS NOT NULL THEN CONCAT(su.phone_cell, cc.gateway) ELSE "" END
ELSE su.email1 END AS address
FROM  ticketing_system_notifications AS n
INNER JOIN(
SELECT DISTINCT created_by, issue_id FROM ticketing_system_discussions
WHERE status = 1
) AS ds ON n.notify = ds.created_by
INNER JOIN users AS su ON su.user_id = n.notify
LEFT JOIN cell_phone_carriers AS cc ON cc.carrier_id = su.carrier_id
WHERE ds.issue_id = 31 AND n.notify <> 12 AND n.notification_type = "REPLY"
AND n.category_id = 0 AND n.status = 1 AND (n.expired_on IS NULL OR n.expired_on > NOW() ) 

AND (  (n.start IS NULL OR n.end IS NULL) OR (  

CASE WHEN n.start <= n.end THEN
CURTIME() BETWEEN n.start AND n.end
ELSE
CURTIME() >= n.start AND CURTIME() <= n.end
END   )  ) 

这是我出错的地方

CASE WHEN n.start <= n.end THEN
CURTIME() BETWEEN n.start AND n.end
ELSE
CURTIME() >= n.start AND CURTIME() <= n.end
END   )

有人可以帮我构建逻辑以正确捕获时间吗? 字段startend都属于TIME

类型

在我的ticketing_system_notifications表格中,我有以下2条记录 1)start = '08:00:00'end = '18:00:00'文字
2)start = '17:59:59'end = '07:59:59'

1 个答案:

答案 0 :(得分:8)

如果时间范围超过午夜,则应使用此逻辑:

 curtime() >= n.start OR curtime() <= n.end

想一想:当前时间必须介于“开始”和午夜之间,或者是午夜和“结束”之间。