选择列修改

时间:2014-05-02 00:23:15

标签: sql

假设我们在列中有这个值

<color="blue" size="5"><color="red">

如何使用SQL语句将“red”替换为蓝色?

(值动态,因此使用常规REPLACE不会这样做)

我真的很困惑如何解决它。

3 个答案:

答案 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)

我会玩substringspatindex

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">'替换该点上的字符串。