MySQL 存储过程或函数 return 特定格式的人名
MySQL stored procedure or function to return a person's name in a specific format
我不太清楚存储过程和函数之间的区别。我有一个员工目录数据库,其数据 table 包含以下姓名字段等详细信息:
first_name, varchar(45)
mi, char(3)
last_name, varchar(45)
suffix, varchar(10)
我希望能有一个function/procedurereturn全名
last_name (后缀), first_name ( mi)
格式,其中括号中的字段在table中为NULL可选。我可以使用
在 PHP 中构建格式化名称字符串
SELECT last_name, suffix, first_name, mi from employee;
,然后使用一系列条件来测试空后缀和 mi 字段。但是,我希望能够使用 SQL 语句,例如
SELECT getDisplayName() WHERE last_name LIKE '%Smith%';
至 return 结果类似于
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 看起来像:
SELECT getDisplayName(last_name, suffix, first_name, mi) FROM employee WHERE last_name LIKE '%Smith%';
我不太清楚存储过程和函数之间的区别。我有一个员工目录数据库,其数据 table 包含以下姓名字段等详细信息:
first_name, varchar(45)
mi, char(3)
last_name, varchar(45)
suffix, varchar(10)
我希望能有一个function/procedurereturn全名
last_name (后缀), first_name ( mi)
格式,其中括号中的字段在table中为NULL可选。我可以使用
在 PHP 中构建格式化名称字符串SELECT last_name, suffix, first_name, mi from employee;
,然后使用一系列条件来测试空后缀和 mi 字段。但是,我希望能够使用 SQL 语句,例如
SELECT getDisplayName() WHERE last_name LIKE '%Smith%';
至 return 结果类似于
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 看起来像:
SELECT getDisplayName(last_name, suffix, first_name, mi) FROM employee WHERE last_name LIKE '%Smith%';