如何从单个字段中的多个值进行搜索(GTFS 中的公交车站)?

How to search from multiple values in single field (Bus Stops in GTFS)?

在丹佛的 GTFS 数据中,BUS_STOPS table 在 ROUTES 列中存储多个以逗号分隔的值:

28, 19, 44, 10, 32

我正在 selectBUS_ROUTES 学校附近。

但是对于 select 沿这些路线的相应停靠点意味着要尝试从我上面描述的列表中找到一个公共汽车站(例如服务 44 路公共汽车的公共汽车站)- 我不确定如何执行此操作。

下面的评论帮助我弄清楚 selecting 1 路线的价值如下所示:

select * from BUS_STOPS where ROUTES like '% 44,%';

...其中一个 returns 记录包含 44 在其中一个列出的值中。

那么我如何将静态值 44 替换为 BUS_ROUTES table 中 ROUTES 字段的值?

BUS_ROUTES table 看起来像这样:

...BUS_STOPS table 看起来像这样:

我正在使用 PostgreSQL 查询 GTFS 数据。

将字符串转换为数组,然后使用数组比较:

select * 
from BUS_STOPS 
where '44' = any(string_to_array(routes,',')

这也可以用作连接条件:

select * 
from BUS_STOPS s
   join bus_routes r on string_to_array(s.routes,',') @> string_to_array(r.routes,',')

@> 是 "contains" 运算符,用于测试左数组 (bus_stops.routes) 是否包含右数组 (bus_routes.routes) 中的所有元素。另一种选择是使用重叠运算符 && - 我不清楚你到底想要什么