postgresql - 如何使用 psql CASE WHEN 测试正则表达式
问题描述
如果以 F 开头,我编写的下一个函数尝试返回相同的 mcode,如果只是一个数字,split_part(mcode, ':', 2)
则返回类似 N43452的内容。split_part(mcode, ':', 2)
我正在尝试使用正则表达式运算符〜。我可以使用 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;
$$;
推荐阅读
- mysql - 如何从mysql获取特定表的索引值?
- javascript - OpenLayers - 不同图层的图像过滤器
- gtk# - How to change Meson version in Gnome Builder 3.30.1?
- vba - 使用 And 而不是分支会导致 #REF 错误
- c++ - Distutils 导致 protobuf 失败
- spring - 使用 JAVA 对 geomesa cassandra 数据存储执行查询
- php - Sort associative array
- javascript - 在三个字符后插入破折号 - Google Chrome 移动问题
- port - 如何更改 esxi 主机 6.7 中的默认端口 80 和 443?
- c# - How to use postsharp with Serilog to separate logging aspect?