在 where 子句中使用特定的数组列

Fab*_*oni 3 postgresql array where postgresql-9.5

有一个返回数组的函数,在查询中我们使用该函数返回结果,例如:

{"TUNDUMA GOING (BORDER)","ARRIVAL DATE",09/01/2016,22,"AT CHECKPOINT"}
{"TUNDUMA RETURN (BORDER)","DEPARTURE DATE",29/01/2016,2,"ON THE ROAD"}
Run Code Online (Sandbox Code Playgroud)

我们如何添加一个WHERE子句,该子句将仅通过搜索ON THE ROAD值的数组的第 5 列进行过滤?

有没有办法参考array[4]

试过

where trip_status(tlid) <@ array['AT CHECKPOINT']::varchar
Run Code Online (Sandbox Code Playgroud)

trip_status()是一个返回数组的功能,但我发现了以下错误:

Query failed: ERROR: operator does not exist: character varying[] <@ character varying 
LINE 6: ...ere trip_closed(tlid)=false and trip_status(tlid) <@ array[ ... ^ 
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

类似的东西where trip_status(tlid)[4] = 'AT CHECKPOINT'存在吗?

dez*_*zso 7

您将演员表放在数组构造函数之外 - 请::varchar[]改用。当前查询将返回数组文字(类型为varchar)而不是实际数组 - 请参阅示例SQL Fiddle

但总的来说,如果您只需要将输出作为下游的数组,那么如果您在上游返回正确的列会让您的生活更轻松 - 例如,更容易在WHERE子句中使用这些列。然后在将它返回到任何需要它的地方之前直接构造你的数组。