更新 oracle8i 数据库中我们无法使用正则表达式的记录

Posted

技术标签:

【中文标题】更新 oracle8i 数据库中我们无法使用正则表达式的记录【英文标题】:update records in oracle8i database where we cannot use regex 【发布时间】:2018-08-27 04:21:20 【问题描述】:

我手头有一个任务,我需要更新大约 200 条记录的电话号码格式。当前格式为

xwz@gmail.com,04163304166@redcoal.com

新格式应该是

xwz@gmail.com,+614163304166@redcoal.com

我尝试使用regex,但 oracle 8i 不允许我使用它。

【问题讨论】:

您能否改进您的架构设计并将它们存储在单独的列中?单个关系数据库列中的 CSV 数据是一种糟糕的设计气味 @Phil 是的,你是对的,但它是一个遗留应用程序,更改架构也会触发应用程序端的更改,这是我们不想要的。 你可能想把这些信息放在你的问题的前面和中心,这样你就不会因为“糟糕的设计”(这种情况经常发生) 您可以将 PLSQL 与 INSTR 和 SUBSTR 函数一起使用。这实际上取决于您的数据格式。 【参考方案1】:

这看起来是一种非常糟糕的数据格式——在一个字符串中存储多个值。但是,您可以使用replace(),至少对于您给出的示例:

select replace(col, ',0', ',+61')
from t;

我会检查这是否符合您的要求。最后,查询可能如下所示:

update t
    set col = replace(col, ',0', ',+61')
    where col like '%,0';

【讨论】:

以上是关于更新 oracle8i 数据库中我们无法使用正则表达式的记录的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 8i - 无法从子查询中引用外部表

PySpark 无法通过 sparkContext/hiveContext 读取 Hive ORC 事务表?我们可以使用 Pyspark 更新/删除配置单元表数据吗?

关于更新表结构时碰到的DDL锁导致数据库无法连接

ORA-00933: 甲骨文 8i

完整的正则表达式知识汇总(Python知识不断更新)

使用JOOQ无法在SQLITE中更新表行