代码之家  ›  专栏  ›  技术社区  ›  Ken Ingram

MYSQL触发器中的CASE语句

  •  -1
  • Ken Ingram  · 技术社区  · 7 年前

    关于这个主题的大部分信息似乎都严格地引用了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;
    

    当我试图保存代码时,出现了一个错误: 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 回复  |  直到 7 年前
        1
  •  0
  •   ScaisEdge    7 年前

    您不应该使用SET为列赋值。您只需要选择列例如:假设您想要结果v\u 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;
    
    推荐文章