从postgres中的不同类型的列中选择非空值

时间:2017-04-21 20:00:47

标签: sql postgresql

我有一个属性值表,如下所示,我知道只有一个* _value字段包含一个值,其他字段将为NULL。

仅选择非空值的列的最有效方法是什么?

我试过了

SELECT property_id, COALESCE(int_value, str_value, etc)

但这不起作用,因为它们是不同的列类型,类似于NULLIF。我可以投出所有值,但我不想丢失值类型。

property_values
-----------------------------------------------
property_id      | integer
int_value        | integer
str_value        | character varying
time_value       | timestamp without time zone
txt_value        | text
dec_value        | numeric
bool_value       | boolean
json_value       | jsonb

1 个答案:

答案 0 :(得分:0)

评论太长了。

你不能做你想做的事,至少"合理地"。如您所知,由于类型冲突,coalesce()无法正常工作。这接近问题的根源:结果集中的列必须具有特定类型。

那么,您希望结果是什么类型的?你可以决定一个普遍的"类型,例如字符串。我不确定这对你的用例是个好主意。