2012-06-22 30 views
7

Tôi cố gắng để làm một cái gì đó như thế này:Sử dụng kết quả của truy vấn trong một hàm (postgres 8.3)

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

này sẽ không làm việc, và tôi đoán, bởi vì các kiểu trả về của một truy vấn là một bảng , không phải chuỗi hoặc biến văn bản.

Có cách nào để chỉ định hàng, col của kết quả từ câu lệnh chọn không?

chỉnh sửa: Tôi bỏ qua đề cập đến, char_length là một hàm.

+0

Tại sao bạn làm điều đó phức tạp? Tại sao không đơn giản truyền 'text_field' vào hàm? Có lý do nào khiến bạn làm theo cách đó không? –

Trả lời

8

Khi đi qua là kết quả của một truy vấn đến một chức năng, chỉ cần quấn truy vấn trong ngoặc:

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

Tập ngoài của dấu ngoặc là dành cho các chức năng, các thiết lập bên trong chuyển đổi một truy vấn đến một kết quả.

Cú pháp này không dành riêng cho postgres - nó áp dụng cho tất cả các máy chủ SQL.

This link cho thấy mã trên thực hiện một cách chính xác (nhờ @Fahim Parkar cho điều này)


Mặc dù, bạn có thể tái yếu tố truy vấn của bạn không đòi hỏi cú pháp này, tuy nhiên đây là cách bạn "vượt qua kết quả của một truy vấn đến hàm "#:.

+0

Làm việc của nó. [Thử nghiệm ở đây] (http://sqlfiddle.com/#!1/81b7e/1) –

+0

@FahimParkar Cảm ơn bạn đã thử nghiệm - Tôi sẽ thêm nó vào câu hỏi – Bohemian

0

Nó phải là

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

Ngoài ra tôi tin rằng, tên bảng của bạn không phải là table.

+0

char_length là một hàm. Tôi đang cố gắng tìm chiều dài của text_field. Vì lợi ích của sanity, tôi đã cố gắng sửa chữa của bạn, và nó đã không hoạt động. – nulltorpedo

+0

@nulltorpedo: Opps tôi đã không nhận thấy rằng ... Tôi sẽ chỉnh sửa truy vấn ... –

+0

Cú pháp không hợp lệ đối với Postgres vì ​​nó sử dụng dấu ngoặc kép chuẩn không phải là những dấu gạch chéo không chuẩn. Nó sẽ là '" bảng "' thay vì –

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

truy vấn này sẽ làm việc ?? bảng là một từ khóa dành riêng. MỞ ĐẦU cú pháp này là INVALID: D :) –

+0

@ FahimParkar: điểm tốt Tôi thực sự chỉ làm sao chép và dán :) –

0

Giả sử khóa là khóa chính hoặc khóa duy nhất mà ví dụ đầu tiên bên dưới sẽ hoạt động. Nó chỉ hoạt động nếu truy vấn con trả về chỉ 1 hàng. Ví dụ thứ hai sẽ hoạt động cho 1 hoặc nhiều hàng.

select char_length((select text_field from table where key = 1)); 
select char_length(text_field) from table where key = 1; 
Các vấn đề liên quan