¿Cuál será el equivalente de Postgres para el siguiente código de Oracle?
Select instr('abc de fgh',' ', -1) from dual; devoluciones: 7
Código original: substr(country, instr(country,' ', -1)+1);
Quiero crear la misma lógica en Postgres pero la función de posición e inversión no funcionó
Aparentemente, desea el último elemento de la cadena donde los elementos están delimitados por un carácter de espacio.
Si está utilizando Postgres 14, puede usar:
split_part('abc de fgh', ' ', -1); que devuelve fgh
O con una referencia de columna: split_part(country, ' ', -1)
En versiones anteriores, split_part() no permite compensaciones negativas, por lo que necesitaría algo diferente:
(string_to_array('abc de fgh', ' '))[cardinality(string_to_array('abc de fgh', ' '))]Es un poco más corto con una columna de referencia:
(string_to_array(country, ' '))[cardinality(string_to_array(country, ' '))] Esto primero convierte la cadena en una matriz, luego elige el último elemento de la matriz (que a su vez se determina mediante la función de cardinality() que devuelve la longitud de la matriz)