我想执行以下代码......
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 :(得分: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'
希望这有帮助!!!
答案 1 :(得分:0)
电话号码必须存储为数字而非字符串。
使用您的数据库平台转换功能。
示例:
CONVERT(VARCHAR(20), a.phone) + " " + CONVERT(VARCHAR(20), b.mobile)
由于我们现在知道这是MySql,您可以尝试:
CONCAT(a.phone, " ", b.mobile)
答案 2 :(得分: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。
答案 3 :(得分:-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'