2012-06-22 18 views
7

que estoy tratando de hacer algo como esto:Uso resultado de la consulta en una función (postgres 8.3)

select char_length(select text_field from table where key = 1) 

Esto no funcionará, y supongo, porque el tipo de retorno de una consulta es una tabla , no una cadena o variable de texto.

¿Hay alguna manera de especificar la fila, col del resultado de una instrucción select?

editar: pasé por alto mencionar que char_length es una función.

+0

¿Por qué lo haces tan complicado? ¿Por qué no simplemente pasar 'text_field' a la función? ¿Hay alguna razón por la que lo haces de esa manera? –

Respuesta

8

Al pasar el resultado de una consulta a una función, simplemente envolver la consulta entre paréntesis:

select char_length((select text_field from table where key = 1)); 

El conjunto exterior de paréntesis es para la función, el conjunto interior convierte una consulta a una resultado.

Esta sintaxis no es específica de postgres: se aplica a todos los servidores SQL.

This link muestra el código anterior ejecutar correctamente (gracias a @Fahim Parkar para esto)


Aunque, podría volver a factor de la consulta para no requerir esta sintaxis, sin embargo esta es la forma de "pasar el resultado de una consulta a una función ".

+0

Su funcionamiento. [Probado aquí] (http://sqlfiddle.com/#!1/81b7e/1) –

+0

@FahimParkar Gracias por el caso de prueba: lo agregaré a la pregunta – Bohemian

0

Debe ser

select char_length(text_field) from "table" where key = 1 

También creo, el nombre de la tabla no es table.

+0

char_length es una función. Estoy tratando de encontrar la longitud del text_field. Por el bien de la salud, intenté tu solución, y no funcionó. – nulltorpedo

+0

@nulltorpedo: Opps no me di cuenta de que ... editaré la consulta ... –

+0

La sintaxis no es válida para Postgres porque utiliza las comillas dobles estándar, no esos backticks temidos no estándar. Debería ser '" table "' en su lugar –

2
select char_length(text_field) from "table" where key = 1 
+0

¿funcionará esta consulta? table es una palabra clave reservada. INCLUSO esta sintaxis es INVALIDA: D :) –

+0

@FahimParkar: buen punto, de hecho, solo copié y pegué :) –

0

Asumiendo que la llave es una llave primaria o una llave única, funcionará el primer ejemplo a continuación. Funciona solo si la subconsulta solo devuelve 1 fila. El segundo ejemplo funcionará para 1 o más filas.

select char_length((select text_field from table where key = 1)); 
select char_length(text_field) from table where key = 1; 
Cuestiones relacionadas