在日组之间获取行

时间:2016-05-01 08:54:44

标签: mysql sql

天定义为:

0 - Monday
1 - Tuesday
2 - Wednesday
3 - Thursday
4 - Friday
5 - Saturday
6 - Sunday

我在数据库中有几个小组,其中 start_day end_day ,...

SQL的一部分就是这个

SELECT * 
    FROM groups AS pg 
    WHERE ...
    AND pg.start_day <= 6 
    AND pg.end_day >= 6

现在,如果我的小组有

start_day: 0
end_day: 4

start_day: 5
end_day: 6

上面的SQL工作完全正常。在这种情况下,问题就出现了

start_day: 4
end_day: 5

start_day: 6
end_day: 3 

当我尝试获得第二组时,例如第6天,因为start_day大于end_day。什么是使这项工作的最佳方式?

基本上我的价格取决于一周中的某一天,我需要在一周中的某一天获得正确的价格。

2 个答案:

答案 0 :(得分:0)

如果我理解这个问题,那么周日和周一之间的日间范围似乎会导致问题?

以下附加条款应考虑到这种情况:

WHERE (
    ( start_day <= end_day 
        and ( start_day <= day_of_week and end_day >= day_of_week )
    ) 
    OR 
    ( start_day > end_day 
        and ( day_of_week >= start_day or day_of_week <= end_day )
    ) 
)

答案 1 :(得分:0)

用两周时间添加表格:

create table test (id int, name varchar(20), ord int);
insert into test values (0, 'Monday', 0);
insert into test values (1, 'Tuesday', 1);
insert into test values (2, 'Wednesday', 2);
insert into test values (3, 'Thursday', 3);
insert into test values (4, 'Friday', 4);
insert into test values (5, 'Saturday', 5);
insert into test values (6, 'Sunday', 6);
insert into test values (0, 'Monday', 10);
insert into test values (1, 'Tuesday', 11);
insert into test values (2, 'Wednesday', 12);
insert into test values (3, 'Thursday', 13);
insert into test values (4, 'Friday', 14);
insert into test values (5, 'Saturday', 15);
insert into test values (6, 'Sunday', 16); 

查询:

select * from test where ord between 4 and 0 or ord between 4 and 10;

在Postgres中,您可以将其写为subselect。其他选项是存储过程,但它们也存在一些限制......