2012-06-22 16 views
7

Staram się zrobić coś takiego:Wykorzystanie wynik zapytania w funkcji (PostgreSQL 8.3)

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

To nie będzie działać, i przypuszczam, ponieważ typ powrót zapytania jest tabela , a nie ciąg lub zmienna tekstowa.

Czy istnieje sposób określenia wiersza, col wyniku z instrukcji select?

edytuj: Przeoczyłem, aby wspomnieć, że char_length jest funkcją.

+0

Dlaczego to robisz, że jest skomplikowane? Dlaczego po prostu nie przekazać funkcji 'text_field' do funkcji? Czy istnieje powód, dla którego robisz to w ten sposób? –

Odpowiedz

8

Przechodząc wynik zapytania do funkcji, należy owinąć zapytanie w nawiasach:

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

zewnętrzny zestaw uchwytów dla funkcji, wewnętrzny zestaw przetwarza zapytania do wynik.

Ta składnia nie jest specyficzna dla postgresów - dotyczy wszystkich serwerów SQL.

This link pokazuje powyższy kod poprawnie wykonywany (dzięki @Fahim Parkar do tego)


Chociaż, można ponownie czynnikiem zapytanie do nie wymagają tej składni, niemniej jednak jest to, w jaki sposób „pass wynikiem zapytanie do funkcji ".

+0

Działa. [Przetestowano tutaj] (http://sqlfiddle.com/#!1/81b7e/1) –

+0

@FahimParkar Dzięki za test - dodam to do pytania – Bohemian

0

Powinno być

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

Również wierzę, nazwa tabeli nie jest table.

+0

char_length jest funkcją. Próbuję znaleźć długość pola tekstowego. Na litość boską, wypróbowałem twoją poprawkę i nie zadziałało. – nulltorpedo

+0

@ nulltorpedo: Opps i nie zauważyłem, że ... będę edytować zapytanie ... –

+0

Składnia jest niepoprawna dla PostgreSQL, ponieważ używa standardowych podwójnych cudzysłowów, a nie niestandardowych backdicks dreaded. Powinien to być "" stół "zamiast tego –

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

czy to zapytanie działa? tabela jest zastrzeżonym słowem kluczowym. JESZCZE ta składnia jest NIEPRAWIDŁOWA: D :) –

+0

@FahimParkar: Dobrze, że właściwie tylko kopiowałem i wklejałem :) –

0

Zakładając, że klucz jest kluczem podstawowym lub kluczem unikatowym, pierwszy przykład poniżej zadziała. Działa tylko wtedy, gdy pod-zapytanie zwraca tylko 1 wiersz. Drugi przykład będzie działał dla 1 lub więcej wierszy.

select char_length((select text_field from table where key = 1)); 
select char_length(text_field) from table where key = 1; 
Powiązane problemy