Có một số cách. Một cách là truyền mảng thành văn bản và tách mảng đó bằng regexp_split_to_table ()
.
Hàm này có trong PostgreSQL 8.3 trở lên .
SELECT regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{');
Đầu ra:
0,0,0
1,1,1
2,2,2
Nếu bạn muốn các dấu ngoặc bao quanh (có thể bạn không?), Hãy thêm chúng trở lại như sau:
SELECT '{' || regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{') || '}';
Đầu ra:
{0,0,0}
{1,1,1}
{2,2,2}
Thay thế:
Điều này cũng sẽ hoạt động với PostgreSQL 8.2 hoặc thậm chí có thể sớm hơn, nhưng tôi đã không kiểm tra điều đó.
SELECT my_2d_int_arr_var[x:x][1:3]
FROM (SELECT generate_series(1, array_upper(my_2d_intarr, 1), 1)::int4 AS x)) x
Đầu ra:
{{0,0,0}}
{{1,1,1}}
{{2,2,2}}
(Bạn có thể muốn bỏ một số dấu ngoặc nhọn ..)
Nếu không, tôi sẽ viết một hàm plpgsql lặp qua mảng. Khá dễ dàng.
Ngoài ra còn có liên quan unnest()
nhưng nó trả về một hàng cho mỗi phần tử cơ sở (số nguyên trong trường hợp này), vì vậy nó không được sử dụng ở đây.
Một cách (nhanh!) Để xuất ra kết quả: COPY
.