2012-04-24 42 views
5

Tôi đã thử một vài biến thể, nhưng từ đọc sách của tôi của the documentation mô hình này nên làm việc '' || val1 || val1 ... nhưng kết quả của tôi là một cột rỗng ...cột concat trong postgresql chọn

thedb=# \d buildings_propertyvalue; 
           Table "public.buildings_propertyvalue" 
    Column |   Type   |        Modifiers        
-----------+------------------------+---------------------------------------------------------------------- 
id  | integer    | not null default nextval('buildings_propertyvalue_id_seq'::regclass) 
prop_id | integer    | not null 
place_id | integer    | not null 
float_val | double precision  | 
int_val | integer    | 
char_val | character varying(255) | 
text_val | text     | 

thedb=# select * from buildings_propertyvalue limit 10; 
id | prop_id | place_id | float_val | int_val | char_val | text_val 
-----+---------+----------+-----------+---------+----------+---------- 
798 |  3 |  170 |   |  831 |   | 
    2 |  46 |  180 |   |  0 |   | 
733 |  2 |  180 |  40 |   |   | 
737 |  10 |  180 |   |  0 |   | 
740 |  5 |  345 |  100 |   |   | 
742 |  10 |  345 |   |  0 |   | 
    11 |  2 |  170 |  50 |   |   | 
744 |  11 |  345 |   0 |   |   | 
746 |  14 |  345 |   |   | 52  | 
749 |  46 |  348 |   |  0 |   | 
(10 rows) 

thedb=# select prop_id, place_id, '' || float_val || int_val || char_val || text_val as val from buildings_propertyvalue limit 10; 
prop_id | place_id | val 
---------+----------+----- 
     3 |  170 | 
     46 |  180 | 
     2 |  180 | 
     10 |  180 | 
     5 |  345 | 
     10 |  345 | 
     2 |  170 | 
     11 |  345 | 
     14 |  345 | 
     46 |  348 | 
(10 rows) 

Trả lời

11

Kết nối một NULL với chuỗi không trống sẽ mang lại một số NULL

Vì các cột *_val của bạn không có giá trị, có thể điều gì đang xảy ra.

Hãy thử điều này:

'' || COALESCE(float_val::TEXT, '') || COALESCE(int_val::TEXT, '') || COALESCE(char_val, '') || COALESCE(text_val, '') 

hoặc, nếu bạn chỉ có thể có ít nhất một giá trị không null, chỉ này:

COALESCE(float_val::TEXT, int_val::TEXT, char_val, text_val, '') 

Lưu ý rằng trong PostgreSQL, không giống như một số công cụ khác, TEXT has no downsides compared to VARCHAR . Không có điểm tách riêng các dữ liệu TEXTVARCHAR.

1

Ghép nối giá trị NULL với bất kỳ giá trị nào khác tạo ra NULL. Có vẻ như một số cột được nối là vô giá trị, vì vậy bạn sẽ cần phải quấn một hàm COALESCE xung quanh chúng để buộc chuỗi rỗng hoặc một số giá trị giữ chỗ khác khi chúng là NULL.

Các vấn đề liên quan