Postgresql 测试正则表达式时如何使用psql CASE

Postgresql 测试正则表达式时如何使用psql CASE,postgresql,plpgsql,Postgresql,Plpgsql,我编写的下一个函数尝试返回相同的mcode,如果split_part(mcode',:',2)以F开头,或者如果split_part(mcode',:',2)只是一个数字,则返回类似于N43452的内容。我正在尝试使用正则表达式操作符~。我可以使用IF-THEN来完成这项工作,但我正在尝试使用CASE-WHEN。知道我哪里出错了吗 CREATE OR REPLACE FUNCTION getCode(mcode TEXT) RETURNS TEXT LANGUAGE plpgsql AS $$

我编写的下一个函数尝试返回相同的mcode,如果
split_part(mcode',:',2)
以F开头,或者如果
split_part(mcode',:',2)
只是一个数字,则返回类似于N43452的内容。我正在尝试使用正则表达式操作符~。我可以使用IF-THEN来完成这项工作,但我正在尝试使用CASE-WHEN。知道我哪里出错了吗

CREATE OR REPLACE FUNCTION getCode(mcode TEXT)
RETURNS TEXT
LANGUAGE plpgsql
AS 
$$
BEGIN
    CASE split_part(mcode, ':', 2)
        WHEN  (~ '^F')      THEN RETURN mcode
        WHEN  (~ '[0-9]+$') THEN RETURN CONCAT('N', mcode)
        ELSE RETURN mcode
    END;    


END;
$$;
我还尝试:

CREATE OR REPLACE FUNCTION getCode(mcode TEXT)
RETURNS TEXT
LANGUAGE plpgsql
AS 
$$
BEGIN
     CASE WHEN  (split_part(mcode, ':', 2) ~ '^F')      THEN RETURN mcode
          WHEN  (split_part(mcode, ':', 2) ~ '[0-9]+$') THEN RETURN CONCAT('N', mcode)
          ELSE RETURN mcode
     END;    
 
END;
$$;
得到消息:

ERROR:  syntax error at or near "WHEN"
          WHEN  (split_part(mcode, ':', 2) ~ '[0-9]+$') THEN ...
                 ^
这是你怎么做的, 例如。。只对等式有效。您还需要在case语句之前放一次return,这样您就完成了

CREATE OR REPLACE FUNCTION getCode(mcode TEXT)
RETURNS TEXT
LANGUAGE plpgsql
AS 
$$
BEGIN
   return 
    CASE WHEN split_part(mcode, ':', 2) ~ '^F' THEN  mcode
         WHEN split_part(mcode, ':', 2)  ~ '[0-9]+$' THEN  CONCAT('N', mcode)
        ELSE  mcode
    END;    
END;
$$;
这是你怎么做的, 例如。。只对等式有效。您还需要在case语句之前放一次return,这样您就完成了

CREATE OR REPLACE FUNCTION getCode(mcode TEXT)
RETURNS TEXT
LANGUAGE plpgsql
AS 
$$
BEGIN
   return 
    CASE WHEN split_part(mcode, ':', 2) ~ '^F' THEN  mcode
         WHEN split_part(mcode, ':', 2)  ~ '[0-9]+$' THEN  CONCAT('N', mcode)
        ELSE  mcode
    END;    
END;
$$;

CASE…当
使用相等,而不是一些自定义比较或正则表达式测试时。当…(或
如果…,则
)时,您确实需要
CASE。Bergi是正确的。尝试类似于
s:=split_-part(mcode,,,,2);当s ~'^F'然后…
时的CASE…当
使用相等时,而不是一些自定义比较或正则表达式测试。当…
(或
如果…,则
)时,您确实需要
CASE。Bergi是正确的。尝试类似于
s:=split_-part(mcode,,,,2);如果s~'^F'那么…,则为大小写。