Postgresql 测试正则表达式时如何使用psql CASE
我编写的下一个函数尝试返回相同的mcode,如果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 $$
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'那么…,则为大小写。