mysql:在一个变量中连接两个字符串

时间:2014-04-27 14:05:19

标签: mysql

所以我写了一个程序,它应该在一个变量中连接两个字符串,然后将它存储在DB中。当我运行它时,该过程正常,但它不会将变量存储在db中。相反,它将其存储为0。 这是我用的代码

select memFname, memLname into fn, ln from member where memberid = memid;
SET v_name := fn || '  ' || ln ;

insert into profile(memberid, fullName) values (memid, v_name);

fn,ln和v_name是varchar类型的变量。 memid是整数类型的变量。 我在这里错过了什么吗?

我正在使用触发器调用该过程。

触发代码

DELIMITER $$
create trigger prof_name
after insert on member
for each row
begin
call profile_fullname(new.memberid);

END $$; 
DELIMITER ;

成员表结构: memberid整数, memfname varchar, memlname varchar。

个人资料表结构: profid整数, memberid整数。

1 个答案:

答案 0 :(得分:0)

默认情况下,MySQL中的||运算符是逻辑运算符。您正在使用它作为concat,这就是我认为您使用Oracle的原因。作为逻辑运算符,它会将每个参数转换为逻辑表达式,其值为01。显然,它正在将它们转换为0 s,这就是你在表中获得0的原因。替代方案是1,这不是更有趣。

正确的解决方案是使用concat()代替||。您也可以根据需要将系统变量PIPES_AS_CONCAT设置为使用||,但通常只有在尝试在数据库之间移植代码时才设置。

以下是示例:

update profile
    set fullName = (select concat(memFname, ' ', memLname) from member m where m.memberid = memid)
    where profile.memberid = memid;

如果你真的想要一个插入,它看起来像这样:

insert into profile(memberid, fullname)
    select memid, concat(memFname, ' ', memLname)
    from member m
    where m.memberid = memid;