[英]Concat columns in postgresql select
I've tried a few variations, but from my reading of the the documentation this pattern should work '' || val1 || val1
我尝试了一些变化,但是从我对文档的阅读中,这个模式应该可以正常工作'' || val1 || val1
'' || val1 || val1
'' || val1 || val1
... yet my result is an empty column ... '' || val1 || val1
...但我的结果是一个空列......
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)
Concatenating a NULL
with a non-empty string yields a NULL
将NULL
与非空字符串连接会产生NULL
Since your *_val
columns are nullable, it's probably what is happening. 由于您的*_val
列可以为空,因此可能正在发生的事情。
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
. 请注意,在PostgreSQL
,与其他引擎不同, TEXT
与VARCHAR
相比没有任何缺点 。 There is no point in separating TEXT
and VARCHAR
data. 分离TEXT
和VARCHAR
数据毫无意义。
Concatenating a NULL value to any other value produces a NULL. 将NULL值连接到任何其他值会产生NULL。 It looks like some of the columns being concatenated are nullable, so you will need to wrap a COALESCE function around them to force an empty string or some other placeholder value when they're NULL. 看起来连接的某些列是可空的,因此您需要在它们周围包装COALESCE函数以在空字符串或其他占位符值为NULL时强制它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.