用户定义的功能

时间:2017-10-09 07:08:00

标签: mysql

出于某种原因,我在这方面遇到了很多麻烦。

以下是问题:

编写一个名为LastNameFirst的用户定义的sql函数,该函数将员工的LastNameFirstName连接成一个名为FullName的值,并按顺序显示{ {1}},逗号,空格和LastName(提示:史密斯和史蒂夫将合并为史密斯,史蒂夫)。如果不编写用户定义的函数,有很多方法可以做到这一点,但本练习的目的是编写一个使用sql用户定义函数的解决方案。

这就是我所拥有的:

FirstName

我在这件事上都得到了错误......我不明白为什么。任何帮助将不胜感激。

2 个答案:

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