sql - Regexp_replace 添加额外的字符

标签 sql oracle oracle11g

我在 Oracle 11.2.0.3.0/Toad for Oracle 11.6.1.6 中使用以下查询:

select  regexp_replace('000010PARA197427'
                      ,'([0-9]*)([A-Z]*)([0-9]*)'
                      ,'\3-\2-\1') from dual

197427-PARA-000010 而不是我所期望的。 结果是 197427-PARA-000010--

如果我将查询更改为:

select  regexp_replace('000010PARA197427'
                      ,'([0-9]*)([A-Z]*)([0-9]*)'
                      ,'\3-c\2-c\1') from dual

然后我得到 197427-cPARA-c000010-c-c 作为结果。

这就像所有的文字都被附加到结果的末尾。

如有任何帮助,我们将不胜感激。

最佳答案

不确定为什么会发生这种情况,但由于您只有 * 量词并且没有锚定,所以您可能得到一个空匹配(或类似的东西)。

锚定模式 (/^...$/) 似乎有效。对任何量词使用 + 而不是 * 也适用于此示例。

SQL> select regexp_replace('000010PARA197427'
                          ,'([0-9]+)([A-Z]*)([0-9]*)'
                          ,'\3-\2-\1') foo from dual ;

FOO
------------------
197427-PARA-000010

SQL> select regexp_replace('000010PARA197427'
                          ,'^([0-9]*)([A-Z]*)([0-9]*)$'
                          ,'\3-\2-\1') foo from dual ;

FOO
------------------
197427-PARA-000010

关于sql - Regexp_replace 添加额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26848919/

相关文章:

sql - 使用另一个表作为随机值集合而不使用循环随机更新一组值的方法?

java - 在 jdbc 调用中一次减少提交和插入批量记录?

java - 为什么 jHipster 使用 oracle 12c 配置?使用oracle 11g配置有什么问题吗?

database - oracle数据库正在运行但未监听

mysql - 使用 SQL Oracle BIEE 根据用户输入过滤计算列 -

mysql - 计算每个元素在 "search"中出现的次数

sql - '....where A.ID = B.ID (+)'是什么类型的联接

SQL 触发器 : Are they fired after a statement or a transaction?

java - 更新依赖项后使用 TableGenerator 出现 ConstraintViolationException

oracle 数据泵在 Windows 10 上导入 ORA-39002 和 ORA-39070、ORA-29283 和其他