Guillermo E. Villanueva escribió: > Creo que entiendo la duda de Daniel, el quiere que por cada tupla del > resultado se llame una única vez a una función y a ese resultado poder > usarlo en mas de una proyección de columna y por ejemplo en el where y en > este caso con lo que indica Jairo no lo solucionaría.s
Perdona que te contradiga, pero la solución de Jairo lo soluciona perfectamente. Es fácil verlo haciendo que la función deje una traza en cada ejecución: =# create function f_articulo_get_precio(int) returns text language plpgsql as $$ begin raise notice 'buu!'; return '12342020/09/07'; end $$; CREATE FUNCTION por ejemplo, invocándola una vez vemos la traza: =# select f_articulo_get_precio(1234); NOTICE: buu! f_articulo_get_precio ─────────────────────── 12342020/09/07 (1 fila) y ahora ejecutamos como Jairo sugiere, la traza aparece una única vez: =# with T1 as (select f_articulo_get_precio(1234) as ls_numero) select substr(ls_numero, 8, 13), substr(ls_numero, 21, 10) from t1 ; NOTICE: buu! substr │ substr ─────────┼──────── 0/09/07 │ (1 fila) > (* tampoco lo puede resolver con lo que indica Anthony*) Dicho lo anterior, la solución de Anthony es la realmente inteligente. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services