如何使用 psql CASE WHEN 测试正则表达式
How to use psql CASE WHEN to test regular expressions
如果 split_part(mcode, ':', 2)
以 F 开头,我编写的下一个函数将尝试 return 相同的 mcode;如果 split_part(mcode, ':', 2)
只是一个数字,则 returns 类似于 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;
$$;
如果 split_part(mcode, ':', 2)
以 F 开头,我编写的下一个函数将尝试 return 相同的 mcode;如果 split_part(mcode, ':', 2)
只是一个数字,则 returns 类似于 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;
$$;