php - MySQL存储过程或函数以特定格式返回人名

标签 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)

format,其中括号中的字段在表中为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

有人能给我指出正确的方向,或者至少告诉我是否需要函数或过程吗?

谢谢。

最佳答案

你可以使用这个函数:

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%';

关于php - MySQL存储过程或函数以特定格式返回人名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761790/

相关文章:

mysql - 从 MySQL (MariaDB) 中的存储过程返回 ROW COUNT

mysql - 使用具有动态 ID 的存储过程插入记录时出现问题

php - curl 错误 60 : SSL certificate in Laravel 5. 4

php - 如何从请求 URI 中删除版本前缀并使用正确的文档根目录?

mysql - 这个 MySQL 存储函数有什么问题?

mysql - Laravel 5.3、MySQL、迁移中正确的外键设置(一对多、多对多)

mysql - AppHarbor:NancyFx 应用出现内部服务器错误

php - mysql子查询还是php处理?

php - 为什么我的 Google OAuth URL 在返回的 URL 中放置了哈希值?

mysql - 最佳实践在一张表中创建表或使用mysql中的ID