Tôi nghĩ bạn sẽ phải tự mình RETURNS SET
hoặc RETURNS TABLE
.
câu trả lời Cập nhật: sử dụng PL/pgSQL:
pg=> CREATE OR REPLACE FUNCTION string_to_rows(text) RETURNS SETOF TEXT AS $$
DECLARE
elems text[];
BEGIN
elems := string_to_array($1, ' ');
FOR i IN array_lower(elems, 1) .. array_upper(elems, 1) LOOP
RETURN NEXT elems[i];
END LOOP;
RETURN;
END
$$ LANGUAGE 'plpgsql';
CREATE FUNCTION
pg=> SELECT "Column" FROM string_to_rows('how now brown cow') d("Column");
Column
--------
how
now
brown
cow
(4 rows)
Original câu trả lời: sử dụng PL/perl:
pg=> CREATE LANGUAGE plperl;
CREATE LANGUAGE
pg=> CREATE FUNCTION psplit_to_rows(text) RETURNS SETOF TEXT AS $$
pg$> for my $t (split ' ', $_[0]) { return_next $t; }
pg$> undef;
pg$> $$ LANGUAGE plperl;
CREATE FUNCTION
pg=> SELECT "Column" FROM psplit_to_rows('how now brown cow') d("Column");
Column
--------
how
now
brown
cow
(4 rows)
Rõ ràng bạn có thể mở rộng này để xử lý một delimiter lựa chọn của bạn , v.v. (Lưu ý, tôi không chắc chắn nếu bạn thực sự muốn cột đó có tên "Cột", yêu cầu định danh trích dẫn để tránh xung đột từ khóa, nhưng, bạn đang ở đây.)
+1 cho * generate_series * và * unnest *. – pilcrow