2012-06-22 6 views
7

Ich versuche, so etwas zu tun:Verwenden Ergebnis der Abfrage in einer Funktion (Postgres 8.3)

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

Das wird nicht funktionieren, und ich nehme an, weil der Rückgabetyp einer Abfrage eine Tabelle , keine Zeichenfolge oder Textvariable.

Gibt es eine Möglichkeit, Zeile, Spalte des Ergebnisses aus einer Select-Anweisung anzugeben?

edit: Ich übersehen zu erwähnen, dass char_length eine Funktion ist.

+0

Warum machen Sie das so kompliziert? Warum nicht einfach "text_field" an die Funktion übergeben? Gibt es einen Grund, warum du es so machst? –

Antwort

8

Wenn das Ergebnis einer Abfrage an eine Funktion, einfach die Abfrage in Klammern Einschlag:

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

der äußeren Satz von Brackets für die Funktion ist, wobei der innere Satz wandelt eine Abfrage an einem Ergebnis.

Diese Syntax ist nicht spezifisch für Postgres - sie gilt für alle SQL Server.

This link den obigen Code zeigt (dank @Fahim Parkar für diese) korrekt ausgeführt wird


Obwohl, Sie könnten Ihre Abfrage erneut Faktor diese Syntax nicht erforderlich, doch ist dies, wie Sie „, um das Ergebnis eines übergeben Abfrage zu einer Funktion ".

+0

Es funktioniert. [Getestet hier] (http://sqlfiddle.com/#!1/81b7e/1) –

+0

@FahimParkar Danke für den Testfall - ich werde es zur Frage hinzufügen – Bohemian

0

Es sollte

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

Auch glaube ich, ist der Tabellenname table nicht.

+0

char_length ist eine Funktion. Ich versuche die Länge des text_field zu finden. Um der Vernunft willen habe ich es versucht, und es hat nicht funktioniert. – nulltorpedo

+0

@nulltorpedo: Opps ich habe nicht bemerkt, dass ... Ich werde die Abfrage bearbeiten ... –

+0

Die Syntax ist ungültig für Postgres, weil es die Standard-Anführungszeichen nicht diese nicht-Standard gefürchteten Backticks verwendet. Es sollte "Tabelle" statt –

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

wird diese Abfrage funktionieren? Tabelle ist ein reserviertes Schlüsselwort. Sogar diese Syntax ist ungültig: D :) –

+0

@FahimParkar: guter Punkt Ich habe eigentlich nur kopieren und einfügen :) –

0

Unter der Annahme, dass der Schlüssel ein Primärschlüssel oder ein eindeutiger Schlüssel ist, funktioniert das erste Beispiel unten. Es funktioniert nur, wenn die Unterabfrage nur 1 Zeile zurückgibt. Das zweite Beispiel funktioniert für 1 oder mehr Zeilen.

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