Оператор CASE в триггере MYSQL - PullRequest
0 голосов
/ 15 сентября 2018

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

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;

Когда я пытаюсь сохранить код, я получаю сообщение об ошибке: enter image description here

Основная цель - очистить данные имени и вывести составной список.

Проблема в том, что некоторые части имени не существуют, что вызывает проблемы при форматировании или доставке информации, когда CONCAT встречает NULL.

Я пытался использовать COALESCE и CONCAT_WS, и они не дают желаемых результатов.

У результата есть 4 возможности:

Joe J. Jones, Jr
Joe Jones, Jr
Joe J. Jones
Joe Jones

Я раньше не использовал CASE, и казалось, что это может быть элегантное решение.

Я собираюсь вернуться к IF THEN ELSE, но мне любопытно, превысила ли я то, что здесь возможно.

Возможно, что я не решил эту проблему хорошо, поэтому я был бы признателен за понимание или комментарии, чтобы помочь решить мое любопытство здесь.

1 Ответ

0 голосов
/ 15 сентября 2018

Вы не должны использовать SET для присвоения значения столбцу. Вам просто нужно выбрать столбцы, например: при условии, что вы хотите получить результат v_name столбцы

    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 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 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  CONCAT(v_fname," ",v_mname," ",v_lname)
      ELSE CONCAT(v_fname," ",v_lname) as v_name
    END CASE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...