天定义为:
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。什么是使这项工作的最佳方式?
基本上我的价格取决于一周中的某一天,我需要在一周中的某一天获得正确的价格。
答案 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。其他选项是存储过程,但它们也存在一些限制......