如何在mysql中创建基本功能?

时间:2013-11-29 23:52:56

标签: mysql

创建一个名为NameFormat的函数。该函数有三个输入参数。第一个预期是'F'或'L',第二个和第三个参数是我们期望的最后和名字的字符串。将varchar(25)用于第二个和第三个参数。该函数返回一个格式化名称的字符串。假设姓氏永远不会为空:

如果第一个参数是'F',则名称格式为firstName lastName。 如果第一个参数不是'F',则名称格式为lastName,firstName。 如果第一个名称为null,则仅返回姓氏

这是我的功能不正确。请有人请解决此功能:

   Drop function if exists a_testbed.NameFormat # 
CREATE FUNCTION a_testbed.NameFormat(
  p_mode char(1), lastname varchar(25), firstname varchar(25)) 
RETURNS varchar(52)
BEGIN 
DECLARE v_name varchar(52); 
  if p_mode = 'F' then       
    Set v_name = concat('firstname',' ','lastname');    
elseif p_mode = 'L' then       
    Set v_name = concat('lastname',',','firstname'); 
elseif firstname = null then
    Set v_name = lastname;
end if;  
Return v_name;  
end; # 

Sample Output Should Be:
a_testbed.nameFormat('F', 'Smith', 'John') # returns John Smith
a_testbed.nameFormat('L', 'McDermott', 'Annie') # returns McDermott, Annie
a_testbed.nameFormat('L', 'McDermott', null)# returns McDermott 

1 个答案:

答案 0 :(得分:0)

第一个分隔符#,第二个,逻辑有问题,第三个,应该是“is null”,而不是'= null'。并设置v_name = lastname。像这样:

Drop function if exists a_testbed.NameFormat;
delimiter #
CREATE FUNCTION a_testbed.NameFormat(
p_mode char(1), lastname varchar(25), firstname varchar(25))
RETURNS varchar(52)
BEGIN
DECLARE v_name varchar(52);
if p_mode = 'F' then
    Set v_name = concat(firstname,' ',lastname);
elseif p_mode = 'L' then
    if firstname is null then
        Set v_name = lastname;
    else
        Set v_name = concat(lastname,',',firstname);
    end if;
end if;
Return v_name;
end #

select a_testbed.nameFormat('F', 'Smith', 'John');
select a_testbed.nameFormat('L', 'McDermott', 'Annie');
select a_testbed.nameFormat('L', 'McDermott', null);