如何使用 Oracle 替换列中大文本的特定单词

How to replace specific word on a large text in a column using Oracle

我想替换特定列中的值。 例如以下列值

desc
----------
Test1 words = 30 have so much words = 20 over 60 words +
Test2 words = 30 have so much words = 20 over 60 words +
Test3 words = 30 have so much words = 20 over 60 words +
Test4 words = 30 have so much words = 20 over 60 words +

应该是(将 ords = 20 替换为 Alpha = 20)

结果:

desc
----------
Test1 words = 30 have so much Alpha = 20 over 60 words +
Test2 words = 30 have so much Alpha = 20 over 60 words +
Test3 words = 30 have so much Alpha = 20 over 60 words +
Test4 words = 30 have so much Alpha = 20 over 60 words +

我尝试了以下方法:

更新 table set desc = REPLACE('words = 20', 'words', 'Alpha') where ;

结果为:

Alpha = 20 而不是整行。 但是,我怎样才能让文本的其余部分只更改“words = 20”,但仍然保留测试的其余部分?

您的陈述:

update table set desc = REPLACE('words = 20', 'words', 'Alpha') where ...;

正在替换 固定字符串 'words = 20` 中的 'words';它根本不作用于您现有的列值。

你可以这样做:

update table set desc = REPLACE(desc, 'words = 20', 'Alpha = 20') where ...;

db<>fiddle(使用有效的 table 和列名称)。

如果要替换 所有 次出现的 'words',而不仅仅是 'words = 20',则从两个参数中删除 = 20;但从你的尝试来看,我认为你希望它更有针对性。

您需要对原始字符串执行 replace,而不是对 `'words = 20':

UPDATE mytable
SET    desc = REPLACE(desc, 'words', 'Alpha')

旁注:
我猜这些不是您 table 中的真实姓名,但 desc 是 SQL 中的保留字。如果它确实是列的名称,则需要用双引号将其转义(即 "desc")。