如何在单个字段中搜索多个值(GTFS中的总线停止)?

时间:2017-02-17 20:52:36

标签: postgresql postgis gtfs

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

28, 19, 44, 10, 32

我正在选择距离学校不远的BUS_ROUTES。

但是要沿着这些路线选择相应的停靠点意味着尝试从我上面描述的列表中找到一个公共汽车站(例如,服务于公共汽车44) - 我不知道该怎么做。

下面的评论帮助我弄清楚选择1路线的价值如下:

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

...返回列出的值之一中包含44的记录。

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

BUS_ROUTES表如下所示:

enter image description here

...并且BUS_STOPS表如下所示:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

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

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,',')

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