假设我们在列中有这个值
<color="blue" size="5"><color="red">
如何使用SQL语句将“red”替换为蓝色?
(值动态,因此使用常规REPLACE不会这样做)
我真的很困惑如何解决它。
答案 0 :(得分:1)
REGEXP_REPLACE
使用正则表达式允许您指定希望在给定字符串中替换的模式。由于您的两个color
标记的结构不同,您可以利用此标记指定与第二个实例匹配的模式,但不能指定第一个like so (SQL Fiddle)
SELECT your_column,
REGEXP_REPLACE(your_column, '(.*)<color=".+">', '\1<color="blue">') AS "your_column_fixed"
FROM your_table
;
这将输入<color="blue" size="5"><color="???">
形式,并将其转换为第二个标记替换为<color="blue">
的形式。正则表达式中的.
operator匹配任何非空字符。 +
修饰符表示匹配.
的一个或多个匹配项。使用括号在运算符周围表示匹配的值在replace参数中可用为\n
,其中 n 是模式中的对应位置。
答案 1 :(得分:0)
我会玩substrings和patindex。
DECLARE @COLOR varchar(20),
@YOUR_VALUE varchar(100)
SET @YOUR_VALUE = SUBSTRING(@YOUR_VALUE, 8, LEN(@YOUR_VALUE))
SET @COLOR = SUBSTRING(@YOUR_VALUE, 0, PATINDEX('%"%', @YOUR_VALUE))
以上删除了&#39; color =&#34;它总是长度为8,然后找到下一个&#39;&#39;&#39;的索引,然后将@COLOR设置为直到该索引的子字符串。
答案 2 :(得分:0)
这是一个暴力表达:
select substr(col, 1, instr(col, '><color="'))||'<color="blue">'
它找到'><color='
的第一个匹配项,并用'<color="blue">'
替换该点上的字符串。