Concat columns in postgresql select
postgresql, sql
Solution
Concatenating a `NULL` with a non-empty string yields a `NULL`
Since your `*_val` columns are nullable, it's probably what is happening.
Try this:
'' || COALESCE(float_val::TEXT, '') || COALESCE(int_val::TEXT, '') || COALESCE(char_val, '') || COALESCE(text_val, '')
or, if you can only have at most one non-null value, just this:
COALESCE(float_val::TEXT, int_val::TEXT, char_val, text_val, '')
Note that in `PostgreSQL`, unlike some other engines, `TEXT` has no downsides compared to `VARCHAR`. There is no point in separating `TEXT` and `VARCHAR` data.
Problem
I've tried a few variations, but from my reading of the the documentation this pattern should work `'' || val1 || val1` ... yet my result is an empty column ... ``` 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) ```