说我们在一列有这个值选择修改列
<color="blue" size="5"><color="red">
如何更换“红”与蓝色使用SQL语句?
(动态值,以便使用常规的更换不会做)
我真的怎么解决困惑。
说我们在一列有这个值选择修改列
<color="blue" size="5"><color="red">
如何更换“红”与蓝色使用SQL语句?
(动态值,以便使用常规的更换不会做)
我真的怎么解决困惑。
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匹配任何非空字符。 +
修饰符表示匹配.
的一个或多个匹配项。使用圆括号围绕运算符表示匹配的值将在替换参数中可用,如\n
,其中n是该模式中的对应位置。
这太好了。我对一件事感到困惑......我使代码如此:'(。*)color =“。+”','\ 1color =“green”''(移除了<<),但只有第二个颜色实例更新 - 为什么从现在开始,第一个不匹配? – user3594100
您的模式匹配'color =“'旁边的零个或多个字符,这会改变匹配的内容。正则表达式默认为”贪婪“匹配。要替换'color =”。+“'这两个实例,您需要一个模式与[“lazy”修饰符](http://www.regular-expressions.info/repeat.html)相似,如'REGEXP_REPLACE(“color_tags”,'color =“。+?”','color =“pink” ')' 请记住:[“有些人在遇到问题时想'我知道,我会用正则表达式'。现在他们有两个问题。“](http://programmers.stackexchange.com/questions/223634/what-is-meant-by-now-you-have-two-problems) – ob1quixote
[Fiddle](http:// www.sqlfiddle.com/#!4/3d8b4/24)展示懒惰的比赛。 – ob1quixote
我会玩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))
上面移除了“颜色=‘这永远是长度为8,然后找到下一个的索引“’”,然后设置@COLOR到子串到该索引。
这里是一个强力表达:
select substr(col, 1, instr(col, '><color="'))||'<color="blue">'
它发现的'><color='
的第一次出现和替换从该点上与'<color="blue">'
的字符串。
如果它不是'红色',而是'绿色',为什么REPLACE(col_name,'green','blue')'工作?你究竟想要完成什么? –
试图改变RED现在的子字符串,而不管它的值是什么。 (假装你不知道第二个'颜色'是红色的) – user3594100
你不说你使用的是什么版本的Oracle。这很重要,因为如果['REGEXP_REPLACE'](http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm)可用,它将大大简化事情。 – ob1quixote