Tendo uma função que retorna um array e em uma consulta utilizamos a função para retornar resultados como:
{"TUNDUMA GOING (BORDER)","ARRIVAL DATE",09/01/2016,22,"AT CHECKPOINT"}
{"TUNDUMA RETURN (BORDER)","DEPARTURE DATE",29/01/2016,2,"ON THE ROAD"}
Como podemos adicionar uma WHERE
cláusula que irá filtrar pela 5ª coluna do array buscando ON THE ROAD
apenas os valores?
Existe uma maneira de referenciar array[4]
?
tentei com
where trip_status(tlid) <@ array['AT CHECKPOINT']::varchar
por trip_status()
ser a função que retorna o array mas estou recebendo o seguinte erro:
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.
Algo como where trip_status(tlid)[4] = 'AT CHECKPOINT'
existe?
Você coloca o elenco fora do construtor de matriz - use
::varchar[]
em vez disso. A consulta atual retornará a matriz literal (que é do tipovarchar
) em vez de uma matriz real - consulte o exemplo SQL Fiddle .Mas, no geral, se você precisar apenas da saída como uma matriz downstream, facilitaria sua vida se você retornasse as colunas apropriadas upstream - mais fácil de usar em uma
WHERE
cláusula, por exemplo. Em seguida, construa sua matriz diretamente antes de retorná-la para o que for necessário.