PostgreSQL:如何连接两个字符变化字段

时间:2014-02-11 20:34:56

标签: sql postgresql

我在PostreSQL(v9.3)中有一个名为res_partner的表,其中包含以下列:

phone              | character varying(64)       | 
mobile             | character varying(64)       | 

我想以下列方式连接两个字符串:“phone / mobile”

E.g:

+34942246573 / +3466243765

我在SQL查询中尝试以下内容:

SELECT (phone || '/' || mobile) AS PhoneNumbers  FROM res_partner;

当此人同时填充“手机”和“手机”时,查询工作正常:

myDB=# SELECT id, (phone || '/' || mobile) AS PhoneNumbers FROM res_partner WHERE id=43;
 id |    phonenumbers     
----+---------------------
 43 | 942686868/666666666

但是,如果这个人只有手机或手机(但不是两者),我得到的只是一个emtpy字符串:

myDB=# SELECT id, (phone || '/' || mobile) AS PhoneNumbers FROM res_partner WHERE id=21;
 id | phonenumbers  
----+--------------
 21 | 
(1 fila)

但在这种情况下,我希望能为PhoneNumbers显示“+54 341 324 9459 /”

为什么在输出处显示空字符串?

2 个答案:

答案 0 :(得分:4)

根据SQL标准工作。任何涉及NULL的表达式都会产生null。

您可以使用“null-safe”concat()函数,或者在您的情况concat_ws()中可能更好,它还负责不添加分隔符,其中一个输入为null:

concat_ws('/', phone, mobile);

手册中的更多详细信息:http://www.postgresql.org/docs/current/static/functions-string.html

答案 1 :(得分:1)

您查询的结果是不是一个空字符串 - 它是null,这是对null值执行任何字符串操作的结果。 为避免这种情况,您可以coalesce查询中的列,并用空字符串替换任何null

SELECT (COALESCE(phone, '') || '/' || COALESCE(mobile, '')) AS PhoneNumbers
FROM   res_partner;