关于这个主题的大部分信息似乎都严格地引用了select语句。
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
有可能我还没有很好地解决这个问题,所以我希望能有一些见解或意见来帮助解决我的好奇心。