我有一个GTFS数据库。我想查询calendar
表。
该表具有以下列:
service_id | monday | tuesday | wednesday | thursday | friday | saturday | sunday | start_date | end_date
1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 20190317 | 20200101
...
...
...
我知道如何在开始日期和结束日期之间获取service_id
,但是我不确定如何根据启用(1
)或禁用( 0
)在查询发生的当天。
预期结果将是start_date <= now >= end_date
并且在当天启用的所有行。
示例:如果我今天(星期四)运行查询,它将不会返回我在示例中提供的行。但是,如果我明天(星期五)运行查询,它将返回示例中的行。
这可能吗? (我正在使用SQLite)
答案 0 :(得分:1)
您只需添加几天的条件:
SELECT *
FROM t
WHERE service_id = ?
AND ? BETWEEN start_date AND end_date
AND (CASE
WHEN strftime('%w', ?) = 1 AND monday = 1 THEN 1
WHEN strftime('%w', ?) = 2 AND tuesday = 1 THEN 1
...
END) = 1
答案 1 :(得分:1)
使用strftime('%w', 'now')
,您可以获得今天的工作日数字(0代表星期日,1代表星期一,...)。
因此,您可以使用如下CASE语句:
select * from tablename
where 1 = case strftime('%w', 'now')
when 0 then sunday
when 1 then monday
when 2 then tuesday
when 3 then wednesday
when 4 then thursday
when 5 then friday
when 6 then saturday
end
您可以为开始日期和结束日期添加其他条件。