出于某种原因,我在这方面遇到了很多麻烦。
以下是问题:
编写一个名为LastNameFirst
的用户定义的sql函数,该函数将员工的LastName
和FirstName
连接成一个名为FullName
的值,并按顺序显示{ {1}},逗号,空格和LastName
(提示:史密斯和史蒂夫将合并为史密斯,史蒂夫)。如果不编写用户定义的函数,有很多方法可以做到这一点,但本练习的目的是编写一个使用sql用户定义函数的解决方案。
这就是我所拥有的:
FirstName
我在这件事上都得到了错误......我不明白为什么。任何帮助将不胜感激。
答案 0 :(得分:0)
无论你是想要一个函数还是一个过程,mysql的正常语法规则都适用 - 总是使用;每个开始必须有一个结束等。一个函数看起来像这样
drop function if exists lastnamefirst;
delimiter $$
CREATE FUNCTION LastNameFirst (LastName varchar(50), FirstName varchar(50)) returns varchar(110)
begin
declare Fullname varchar(110);
set fullname = CONCAT(LastName, ', ', FirstName) ;
return Fullname;
end $$
delimiter ;
请注意,如果您只是在mysql中执行此操作,则需要在创建之前设置分隔符并在之后重置它。
所以给出
+----+----------+-----------+
| id | username | photo |
+----+----------+-----------+
| 1 | John | john.png |
| 2 | Jane | jane.png |
| 3 | Ali | |
| 6 | Bruce | bruce.png |
| 7 | Martha | |
+----+----------+-----------+
5 rows in set (0.00 sec)
该函数将像这样调用
select id,username, lastnamefirst(username,ifnull(photo,''))
from users limit 5;
,结果如下所示
+----+----------+------------------------------------------+
| id | username | lastnamefirst(username,ifnull(photo,'')) |
+----+----------+------------------------------------------+
| 1 | John | John, john.png |
| 2 | Jane | Jane, jane.png |
| 3 | Ali | Ali, |
| 6 | Bruce | Bruce, bruce.png |
| 7 | Martha | Martha, |
+----+----------+------------------------------------------+
5 rows in set (0.03 sec)
请注意数据和代码中的空值。
答案 1 :(得分:0)
将您的功能更改为此 -
CREATE FUNCTION LastNameFirst (LastName varchar(50), FirstName varchar(50)) returns varchar(110)
return concat(LastName, ", ", FirstName);
然后你可以像这样使用它 -
select LastNameFirst(LastName, FirstName) from prob5;