PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chọn mảng ở định dạng được in độc đáo trong SQL

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 .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lệnh COPY:chỉ sao chép các cột cụ thể từ csv

  2. Không có liblwgeom khi sử dụng postgresql84 và postgis trên Snow Leopard với MacPorts

  3. Thiết kế cấu trúc dữ liệu để hỗ trợ nhân rộng cơ sở dữ liệu

  4. Thiết lập ODBC PostgreSQL trên Windows

  5. Buộc Liquibase ánh xạ Blob tới BYTEA trên PostgreSQL