2012-06-22 24 views
7

Böyle bir şey yapmaya çalışıyorum:Kullanım sonucu (postgres 8.3)

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

Bu işe yaramaz ve bir sorgunun dönüş tipi bir tablodur çünkü tahmin , bir dize veya metin değişkeni değil.

Seçme ifadesinden satırın satırını belirtmenin bir yolu var mı?

düzenleme: Char_length bir işlev olduğundan bahsetmemeye özen gösterdim.

+0

Bunu neden bu kadar karmaşık yapıyorsunuz? Neden text_field işlevini işleve aktarmıyoruz? Bunu böyle yapmanın bir sebebi var mı? –

cevap

8

bir işlev sorgunun sonucunu geçen zaman, sadece parantez içinde sorgu kaydırma:

dirseklerin dış grubu fonksiyonu içindir
select char_length((select text_field from table where key = 1)); 

iç seti için bir sorgu dönüştürür sonuç.

Bu sözdizimi postgres'e özgü değil - tüm SQL sunucularına uygulanır.

This link

yeniden faktör olabilir bu söz dizimi gerektirmez için sorgu doğru (bunun için @Fahim Parkar sayesinde) Her ne kadar


yürütülmesi yukarıdaki kodu gösterir, yine de bu "bir sonucu geçmesi nasıl bir işlevin sorgulanması.

+0

Onun çalışma. [Test edilmiş] (http://sqlfiddle.com/#!1/81b7e/1) –

+0

@FahimParkar Test vakası için teşekkürler - soruya ekleyeceğim – Bohemian

0

Bu sizin tablo adı table değil,

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

Ayrıca inanıyorum olmalıdır.

+0

char_length bir işlevdir. Text_field uzunluğunu bulmaya çalışıyorum. Tanrı aşkına, fikrini denedim ve işe yaramadı. – nulltorpedo

+0

@nulltorpedo: Muhakkak ki farketmedim ... Sorguyu düzenlerim ... –

+0

Sözdizimi Postgres için geçersizdir, çünkü standart standart olmayan korkulukların standart çift tırnaklarını kullanmaz. Bu sorgu çalışması –

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

yerine "tablo" olmalıdır? tablo ayrılmış bir anahtar kelimedir. Bu sözdizimi EVEN DAVALIDIR: D :) –

+0

@FahimParkar: iyi bir nokta aslında sadece kopyala yapıştırın :) –

0

Anahtarın bir birincil anahtar veya benzersiz anahtar olduğunu varsayarsak, aşağıdaki ilk örnek çalışacaktır. Yalnızca alt sorgu yalnızca 1 satır döndürürse çalışır. İkinci örnek, 1 veya daha fazla satır için çalışacaktır.

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