我正在尝试使用 MySQL 进行时间检查,看看当前时间是否落在 2 个给定时间戳之间。
我想要做的是,如果设置的通知范围位于 2 个给定时间戳之间,则生成通知列表。
因此,如果有人说在“18:00:01”和“07:59:59”之间通过 TXT 消息通知我,那么请在“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 )
有人可以帮我构建正确捕获时间的逻辑吗? 字段
start
和 end
的类型都是 TIME
在我的
ticketing_system_notifications
表中我有以下2条记录start
= '08:00:00' end
= '18:00:00' 文本start
= '17:59:59' end
= '07:59:59'
如果时间范围超过午夜,您应该使用此逻辑:
curtime() >= n.start OR curtime() <= n.end
想一想:当前时间必须在“开始”和午夜之间,或者在午夜和“结束”之间。
这个效果很好。
从 test1 中选择 *,其中 startt 和 endt 之间的“00:00:01”