数据库中有两个日期,开始日期(HH:MM)和结束日期(HH:MM),例如07:00(打开)-20:00(关闭)或07:00-03:00
在以下时间段内正确确定日期是必要的:
示例:
有一家机构在07:00开放,在23:00闭馆,现在20:00,您怎么知道该机构现在是开放的?
或者在07:00开放,在第二天03:00(现在第二天20:00)关闭
或者在22:00开放,在第二天07:00关闭,现在是02:00
或者在22:00开放,在第二天07:00(第二天)关闭
答案 0 :(得分:2)
检查此查询。 @now仅用于测试。您必须稍后将其更改为NOW()
这里是sample
SELECT @now := '14:00:01';
SELECT *,
if( open_time < close_time
, if( @now >= open_time and @now <= close_time , 'in period' , 'out period')
, if( @now >= open_time or @now <= close_time , 'in period' , 'out period'))
as period
FROM docs;
答案 1 :(得分:1)
您有两种情况:
情况一:opening_time < closing_time
(全天开放)
情况二:opening_time > closing_time
(通宵开放)
对于这两种情况,您需要不同的条件。
第一种情况:
current_time() > opening_time AND current_time() < closing_time
第二种情况:
current_time() > opening_time OR current_time() < closing_time
现在将这些案例及其相应的条件合并为一条语句:
(opening_time < closing_time) AND (current_time() > opening_time AND current_time() < closing_time)
OR
(opening_time > closing_time) AND (current_time() > opening_time OR current_time() < closing_time)
由于第一个条件现在处于冗余状态,因此可以将其删除。您的最终查询将是:
SELECT
(current_time() > opening_time AND current_time() < closing_time)
OR
(opening_time > closing_time) AND (current_time() > opening_time OR current_time() < closing_time)
AS is_open_now
FROM your_table
-- your WHERE condition here
这是纯布尔逻辑。但是,处理不同情况的另一种方法是使用CASE
表达式:
SELECT
CASE WHEN opening_time < closing_time
THEN current_time() > opening_time AND current_time() < closing_time
ELSE current_time() > opening_time OR current_time() < closing_time
END AS is_open_now
FROM your_table
-- your WHERE condition here