You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何按多规则拆分含::分隔符的驼峰命令字符串

Postgres字符串拆分实现方案

你可以直接使用Postgres内置的regexp_match()正则匹配函数完成剩余字段的拆分,具体实现逻辑如下:

核心正则规则

针对你给出的字符串格式,我们可以通过分组正则匹配一次性定位所有需要提取的片段:

^([^:]+)::([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)?Command$

各分组对应你的拆分规则:

  • 分组1:第一个冒号前的内容(你已实现的第一步结果)
  • 分组2:::之后第一个大写开头的连续小写字符,对应规则2要求的Create、Update
  • 分组3:紧接着分组2之后的下一个大写开头连续小写字符,对应示例中的User、Person
  • 分组4:剩余的大写开头字符(排除末尾的Command),无内容时返回NULL

完整SQL示例

假设存储命令字符串的表名为command_table,字段名为command_content,查询语句如下:

SELECT
  -- 第二部分:匹配::之后第一个大写开头单词
  (regexp_match(command_content, '::([A-Z][a-z]+)'))[1] AS part2,
  -- 第三部分:匹配第二个大写开头单词
  (regexp_match(command_content, '::[A-Z][a-z]+([A-Z][a-z]+)'))[1] AS part3,
  -- 第四部分:匹配除Command外的剩余大写开头单词,无内容返回NULL
  nullif((regexp_match(command_content, '::[A-Z][a-z]+[A-Z][a-z]+([A-Z][a-z]+)?Command$'))[1], '') AS part4
FROM command_table;

如果需要直接输出逗号拼接的结果,可以使用concat_ws函数:

SELECT concat_ws(', ',
  -- 你已实现的第一部分字段可以直接替换这里的第一个参数
  (regexp_match(command_content, '^([^:]+)::'))[1],
  (regexp_match(command_content, '::([A-Z][a-z]+)'))[1],
  (regexp_match(command_content, '::[A-Z][a-z]+([A-Z][a-z]+)'))[1],
  coalesce(nullif((regexp_match(command_content, '::[A-Z][a-z]+[A-Z][a-z]+([A-Z][a-z]+)?Command$'))[1], ''), 'NULL')
) AS split_result
FROM command_table;

运行后输出和你预期完全一致:

  • User, Create, User, NULL
  • Person, Update, Person, Kommunikation

内容的提问来源于stack exchange,提问作者user2210516

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:12:03