2014-02-11 57 views
1

我有一個名爲res_partner在PostreSQL(v9.3版本)與下面的列表:PostgreSQL的:如何Concat的兩個字符的不同領域

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

我想通過以下方式來連接兩個字符串:「手機/移動」

如:

+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) 

但在這種情況下,我希望展現的東西爲「+54 341 324 9459 /」爲PHONENUMBERS

爲什麼顯示在輸出一個空字符串?

回答

4

按照SQL標準工作。任何涉及NULL的表達式都會返回null

您可以使用「虛擬安全」 concat()功能或可能你的情況concat_ws()更好這也需要在不增加隔板護理是一個輸入爲空:在

concat_ws('/', phone, mobile); 

更多細節手動:http://www.postgresql.org/docs/current/static/functions-string.html

1

您查詢的結果是不空字符串 - 這是null,這是一個null值做任何字符串操作的結果。 爲了避免這種情況,你可以在你的查詢​​3210列,並與空字符串替換任何null S:

SELECT (COALESCE(phone, '') || '/' || COALESCE(mobile, '')) AS PhoneNumbers 
FROM res_partner; 
相關問題