2014-06-20 62 views
-1

我特林執行下面的代碼...串聯在SQL無法正常運行

select a.name, a.phone, b.mobile, b.relation, 
case 
    when a.phone<>'' and b.mobile<>'' then a.phone + ' ' + b.mobile 
    when a.phone<>'' and b.mobile='' then a.phone 
    when a.phone='' and b.mobile<>'' then b.mobile 
else '' 
end as phone 
from abc a join bcdb where a.id=b.id and b.relation='a123' 

但在執行第一種情況下,該值相加,而不是被連接在一起......你能不能請指導我

+0

我得到錯誤,當我使用兩個管道符號(||).. –

+1

哪些數據類型的列和什麼是你的RDBMS - SQL Server,MySQL? – TMNT2014

+0

發佈您在問題中收到的錯誤。 – Kermit

回答

0

既然你使用MySQL,你必須使用CONCAT功能來連接你的字符串,而不是+操作。

select a.name, a.phone, b.mobile, b.relation, 
case 
    when a.phone<>'' and b.mobile<>'' then CONCAT(a.phone, ' ', b.mobile) 
    when a.phone<>'' and b.mobile='' then a.phone 
    when a.phone='' and b.mobile<>'' then b.mobile 
    else '' 
end as phone 
from abc a join bcdb where a.id=b.id and b.relation='a123' 

備註:您應該注意,沒有一個操作數應該爲NULL。

+0

concat函數工作..謝謝! –

0

已更新: 您似乎將手機和移動列存儲爲數字。所以你必須將它們轉換爲字符串進行連接。試試這個:

CONVERT(a.phone, CHAR) + ' ' + CONVERT(b.mobile, CHAR) 

所以您的查詢實際上變成這樣:

select a.name, a.phone, b.mobile, b.relation, 
case 
    when a.phone<>'' and b.mobile<>'' then CONVERT(a.phone, CHAR) + ' ' + CONVERT(b.mobile, CHAR) 
    when a.phone<>'' and b.mobile='' then a.phone 
    when a.phone='' and b.mobile<>'' then b.mobile 
else '' 
end as phone 
from abc a join bcdb where a.id=b.id and b.relation='a123' 

希望這有助於!

+0

我得到錯誤 - #1064 - 你的SQL語法有錯誤;當a.phone <>''和b.mobile = 0時,檢查與您的MySQL服務器版本對應的手冊,以在'a.phone'+''+ CONVERT(NVARCHAR(30),b.mobile) ''在線3 –

+0

@SamuelMathews我已經更新了我的答案。看看它 –

+0

值stil被添加..而不是被連接:( –

0

電話號碼必須存儲爲數字而不是字符串。

使用您的數據庫平臺轉換功能。

例子:

CONVERT(VARCHAR(20), a.phone) + " " + CONVERT(VARCHAR(20), b.mobile) 

因爲我們現在知道這是MySQL,你可以嘗試:

CONCAT(a.phone, " ", b.mobile) 
+0

他們存儲爲varchar –

+0

他們被總結爲數字。你確定他們存儲爲varchars? – Vulcronos

-1

我相信你的數據庫會自動轉換您的手機列整數值,這就是爲什麼它的添加它們而不是連接。

嘗試強制將手機列轉換爲varchar數據類型。由於我不知道你使用的是什麼數據庫,我將舉一個可以在SQL Server上工作的例子。

由於您使用的是MySQL,因此您必須使用CAST()函數,而不是CONVERT()函數。 MySQL中的CONVERT()函數用於轉換編碼。 檢查文檔:http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html [/編輯]

select a.name, a.phone, b.mobile, b.relation, 
case 
    when a.phone<>'' and b.mobile<>'' then CAST(a.phone as VARCHAR(50)) + ' ' + CAST(b.mobile AS VARCHAR(50)) 
    when a.phone<>'' and b.mobile='' then a.phone 
    when a.phone='' and b.mobile<>'' then b.mobile 
else '' 
end as phone 
from abc a join bcdb where a.id=b.id and b.relation='a123' 
+0

我得到這個錯誤 #1064 - 您的SQL語法錯誤;查看與您的MySQL服務器版本相對應的手冊,以查找在VARCHAR,a.phone附近使用的正確語法)+''+ CONVERT(VARCHAR,b.mobile)a.phone <>''和b.mo'在第3行 –

+0

我編輯了我的答案。請再檢查一次。 –

+0

現在我知道你在使用MySQL,我可以根據數據庫編輯我的答案。請再檢查一次。 –