sql中的连接没有按预期工作

时间:2014-06-20 20:13:29

标签: mysql sql concatenation

我想执行以下代码......

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'

但是在执行第一个案例时,这些值总结而不是连接...你能指导我吗

4 个答案:

答案 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'