Большая часть информации по этой теме, похоже, относится исключительно к отдельным утверждениям.
Я пытаюсь реализовать некоторый код в триггере.
DECLARE v_fname, v_mname,v_lname,v_suffix, v_position VARCHAR(80);
DECLARE v_name VARCHAR(120);
SELECT first_name, middle_name, last_name, suffix into v_fname, v_mname, v_lname, v_suffix FROM people where objid = NEW.person_id;
SELECT v_fname, v_mname, v_lname, v_suffix,
CASE
WHEN ((v_mname != "" OR v_mname IS NOT NULL) AND (v_suffix != "" OR v_suffix IS NOT NULL)) THEN SET v_name = CONCAT(v_fname,v_mname,v_lname,v_suffix)
WHEN ((v_mname = "" OR v_mname IS NULL) AND (v_suffix != "" OR v_suffix IS NOT NULL)) THEN SET v_name = CONCAT(v_fname, v_lname, v_suffix)
WHEN ((v_mname != "" OR v_mname IS NOT NULL) AND (v_suffix = "" OR v_suffix IS NULL)) THEN SET v_name = CONCAT(v_fname," ",v_mname," ",v_lname)
ELSE SET v_name = CONCAT(v_fname," ",v_lname)
END CASE;
Когда я пытаюсь сохранить код, я получаю сообщение об ошибке:
Основная цель - очистить данные имени и вывести составной список.
Проблема в том, что некоторые части имени не существуют, что вызывает проблемы при форматировании или доставке информации, когда CONCAT
встречает NULL
.
Я пытался использовать COALESCE и CONCAT_WS, и они не дают желаемых результатов.
У результата есть 4 возможности:
Joe J. Jones, Jr
Joe Jones, Jr
Joe J. Jones
Joe Jones
Я раньше не использовал CASE, и казалось, что это может быть элегантное решение.
Я собираюсь вернуться к IF THEN ELSE
, но мне любопытно, превысила ли я то, что здесь возможно.
Возможно, что я не решил эту проблему хорошо, поэтому я был бы признателен за понимание или комментарии, чтобы помочь решить мое любопытство здесь.