MySQL хранимая процедура или функция, чтобы вернуть имя человека в определенном формате

Я немного размыт о разнице между хранимыми процедурами и функциями. У меня есть база данных каталога сотрудников с таблицей данных, содержащей, помимо прочего, следующие поля имени:

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

Я бы хотел, чтобы функция / процедура возвращала полное имя в

Фамилия (суффикс), имя (ми)

формат, где поля в скобках имеют значение 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

Решение

Вы можете использовать эту функцию:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]