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

PL/SQL更新语句编写求助:正则截断数据库描述字段内容

解决方案:PL/SQL 更新语句保留 (ehem...) 及其左侧内容

针对你描述的需求——截断(ehem. 123)右侧所有内容,仅保留该括号片段及其左侧部分,这里提供两种PL/SQL更新方案,适配不同数据场景:

场景1:每个字符串仅含一个 (ehem...) 片段

如果你的数据中每条记录最多只有一处(ehem...)格式的内容,可以用这条语句:

UPDATE your_table
SET description = CASE
                    WHEN INSTR(description, '(ehem') > 0 THEN
                        -- 截取从开头到 (ehem...) 右括号的所有内容
                        SUBSTR(description, 1, INSTR(description, ')', INSTR(description, '(ehem')))
                    ELSE
                        -- 没有 (ehem 片段的记录保持原样
                        description
                  END
-- 仅更新包含 (ehem 片段的记录,提升效率
WHERE INSTR(description, '(ehem') > 0;

语句解释:

  • INSTR(description, '(ehem'):定位字符串中第一次出现(ehem的位置(兼容(ehem.和(ehem 两种格式)。
  • INSTR(description, ')', INSTR(description, '(ehem')):从(ehem的起始位置开始,找到对应的右括号)的位置,也就是(ehem...)的结束点。
  • SUBSTR(description, 1, ...):截取从字符串开头到该右括号的所有字符,完美保留目标内容。

场景2:字符串可能包含多个 (ehem...) 片段

如果存在一条记录里有多处(ehem...)的情况,且你需要保留最后一个(ehem...)及其左侧内容,可以用反向查找的版本:

UPDATE your_table
SET description = CASE
                    WHEN INSTR(description, '(ehem', -1) > 0 THEN
                        -- 从末尾开始找最后一个 (ehem 的位置,再定位对应的右括号
                        SUBSTR(description, 1, INSTR(description, ')', INSTR(description, '(ehem', -1)))
                    ELSE
                        description
                  END
WHERE INSTR(description, '(ehem', -1) > 0;

这里INSTR(description, '(ehem', -1)是从字符串末尾开始反向查找(ehem的位置,确保定位到最后一处目标片段。

测试验证

用你给出的示例测试:

  • 原字符串:Part 1 (ehem. 123) - Part 2 - [Part 3] → 更新后:Part 1 (ehem. 123)
  • 原字符串:Part 1 (ehem. 123) - [Part 3] → 更新后:Part 1 (ehem. 123)
  • 原字符串:Part1-Part1 (ehem 123) → 无右侧内容,保持原字符串不变
  • 含连字符的Part1:E-Banking (ehem. 456) - Extra → 更新后:E-Banking (ehem. 456)

所有场景都能满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:24:05