MySQL存储过程或函数,以特定格式返回一个人的名字

时间:2016-03-03 02:02:22

标签: php mysql stored-procedures mysql-workbench stored-functions

我对存储过程和函数之间的区别有点模糊。我有一个员工目录数据库,其中包含一个数据表,其中包含以下名称字段:

first_name, varchar(45)
mi, char(3)
last_name, varchar(45)
suffix, varchar(10)

我希望能够让函数/过程返回

中的全名

last_name 后缀), first_name mi

格式,其中括号中的字段在表中为NULL可选。我可以使用

在PHP中构建格式化的名称字符串
SELECT last_name, suffix, first_name, mi from employee;

,然后使用一系列条件来测试空后缀和mi字段。但是,我希望能够使用像

这样的SQL语句
SELECT getDisplayName() WHERE last_name LIKE '%Smith%';

返回

之类的结果
Smith III, John Q
Smith, Susanne L
Smithers, Waylon

有人能指出我正确的方向,或者至少告诉我是否需要功能或程序?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用此功能:

DROP FUNCTION IF EXISTS getDisplayName;
DELIMITER $$
CREATE FUNCTION getDisplayName(last_name text, suffix text, first_name text, mi text)
  RETURNS TEXT
BEGIN
  DECLARE name text;
  SET name = '';
  IF last_name IS NOT NULL THEN
      SET name = last_name;
  END IF;

  IF suffix IS NOT NULL THEN
      SET name = CONCAT(name, ' ', suffix);
  END IF;

  IF first_name IS NOT NULL THEN
      SET name = CONCAT(name, ', ', first_name);
  END IF;

  IF mi IS NOT NULL THEN
      SET name = CONCAT(name, ' ', mi);
  END IF;

  RETURN name;
END;
$$
DELIMITER ;

所以您的选择将如下所示:

SELECT getDisplayName(last_name, suffix, first_name, mi) FROM employee WHERE last_name LIKE '%Smith%';