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

PostgreSQL không tốt với mảng trống

select id, 
       case 
         when int_values is null or array_length(int_values,1) is null then null
         else unnest(int_values)
       end as value
from the_table;

(lưu ý rằng tôi đã đổi tên cột values thành int_values dưới dạng các giá trị values là một từ dành riêng và không được dùng làm tên cột).

SQLFiddle: http://sqlfiddle.com/#!1/a0bb4/1

Postgres 10 không cho phép sử dụng unnest() như vậy nữa.

Bạn cần sử dụng phép nối bên:

select id, t.i
from the_table
   cross join lateral unnest(coalesce(nullif(int_values,'{}'),array[null::int])) as t(i);

Ví dụ trực tuyến: http://rextester.com/ALNX23313

Nó có thể được đơn giản hóa hơn nữa khi sử dụng phép nối trái thay vì phép nối chéo:

select id, t.i
from the_table
 left join lateral unnest(int_values) as t(i) on true;

Ví dụ trực tuyến: http://rextester.com/VBO52351



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cải thiện hiệu suất thủ tục được lưu trữ PostgreSQL 9.6

  2. Rails 4:Sử dụng hàm PostgreSQL theo thứ tự gây ra lỗi trong truy vấn do bảng bao gồm không được tham gia

  3. Django + PostgreSQL:tạo cơ sở dữ liệu (cấp đặc quyền gì)

  4. Tìm các hàng có phạm vi ngày hoãn lại và tích lũy thời lượng của chúng

  5. Kiểu trả về cho hàm với array_agg ()