如何在不使用CONCAT()的情况下串联字段

时间:2019-04-16 13:55:26

标签: mysql sql

由于某种原因,我无法将sql表中的名字和姓氏结合起来。

这是我尝试过的:

SELECT firstname, lastname, firstname + ' ' + lastname as fullname from students;

由于某种原因,它在全名下的每一行的结果“ 0”中显示,但是按正常方式填充了firstname和lastname列。

请帮助。 ***请注意,我不想使用CONCAT()函数

此处的屏幕截图: table

预先感谢

2 个答案:

答案 0 :(得分:5)

您正在尝试添加两个字符串。那没有道理。尽管有些(实际上是一个,因为SQL Server是基于Sybase的)数据库重载+表示字符串连接,但是正确的方法是:

concat(firstname, ' ', lastname) as fullname

或者我更喜欢,因为它可以干净地处理NULL值:

concat_ws(' ', firstname, lastname) as fullname

或在支持ISO / ANSI运算符的数据库中:

(firstname || ' ' || lastname ) as fullname

除非已设置模式PIPES_AS_CONCAT(请参见here),否则这在MySQL中不起作用。

在MySQL中,您将得到0,因为+被视为加法,并且两个字符串(以静默方式)基于前导数字转换为数字。由于两者均以非数字开头,因此它们都转换为0

答案 1 :(得分:3)

只是个猜测,但是您的SQL版本可能将||用作串联运算符:

SELECT
    firstname,
    lastname,
    firstname || ' ' || lastname AS fullname
FROM students;

您看到零的原因可能是由于数据库将字符串列转换为数字,以使+运算符有意义。