2012-06-22 14 views
7

che sto cercando di fare qualcosa di simile:Usa Risultato ricerca in una funzione (postgres 8.3)

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

Questo non funziona, e presumo, perché il tipo di ritorno di una query è una tabella , non una stringa o una variabile di testo.

C'è un modo per specificare la riga, il col del risultato di un'istruzione select?

modifica: ho trascurato di menzionare che char_length è una funzione.

+0

Perché lo fai così complicato? Perché non semplicemente passare 'text_field' alla funzione? C'è una ragione per cui lo fai in questo modo? –

risposta

8

Quando passa il risultato di una query a una funzione, basta avvolgere la query tra parentesi:

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

La serie esterna di parentesi è per la funzione, il gruppo interno converte una query a un risultato.

Questa sintassi non è specifica per postgres - si applica a tutti i server SQL.

This link mostra il codice precedente esecuzione correttamente (grazie a @Fahim Parkar per questo)


Anche se, si potrebbe ri-factor la query per non richiedere questa sintassi, tuttavia questo è il modo per "passare il risultato di un interrogare su una funzione ".

+0

È funzionante. [Testato qui] (http://sqlfiddle.com/#!1/81b7e/1) –

+0

@FahimParkar Grazie per il test case - lo aggiungerò alla domanda – Bohemian

0

Dovrebbe essere

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

Anche io credo, il tuo nome tabella non è table.

+0

char_length è una funzione. Sto cercando di trovare la lunghezza del campo di testo. Per carità, ho provato la tua correzione, e non ha funzionato. – nulltorpedo

+0

@nulltorpedo: Opps non si è accorto che ... Io modificherò la query ... –

+0

La sintassi non è valida per Postgres perché usa le doppie virgolette standard non quelle di retrospie temute non standard. Dovrebbe essere '" table "' invece –

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

questa query funzionerà ?? table è una parola chiave riservata. ANCHE questa sintassi è NON VALIDA: D :) –

+0

@FahimParkar: buon punto in realtà ho solo fatto copia e incolla :) –

0

Supponendo che la chiave sia una chiave primaria o unica, il primo esempio riportato di seguito funzionerà. Funziona solo se la sub-query restituisce solo 1 riga. Il secondo esempio funzionerà per 1 o più righe.

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