我在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 /”
为什么在输出处显示空字符串?
答案 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;