使用SQL中的正则表达式更新字符串

时间:2015-06-19 13:27:57

标签: mysql sql regex sql-update

我的数据库的某些列中有一个字符串:

<img title="\frac{3}{8}" src="http://latex.codecogs.com/gif.latex?\dpi{50}&amp;space;\fn_phv&amp;space;\frac{3}{8}" alt="" />

基本上它包含一个分数的html代码。但现在我想用以下内容替换它:

<sup>3</sup>&frasl;<sub>8</sub>

我知道我可以更新数据库中的值:

UPDATE table 
SET `field` = Replace(`option`, '<img title="\frac{3}{8}" src="http://latex.codecogs.com/gif.latex?\dpi{50}&amp;space;\fn_phv&amp;space;\frac{3}{8}" alt="" />','<sup>3</sup>&frasl;<sub>8</sub>')
WHERE `filed` LIKE  '%<img title="\frac{3}{8}" src="http://latex.codecogs.com/gif.latex?\dpi{50}&amp;space;\fn_phv&amp;space;\frac{3}{8}" alt="" />%'

但是,&#34; \ frac {3} {8}&#34;可以相应改变。括号中的数字可以更改,当它更改时,我需要更改将替换的html标记,以便相应地更改。我知道我需要使用正则表达式,但不确定如何在SQL中执行它。

需要一些指导才能做到。

2 个答案:

答案 0 :(得分:1)

为什么要更新表格?为什么甚至将它存储在表格中?

您的应用程序代码(PHP?)似乎可以构造字符串:

$numerator = 3;
$denominator = 8;
$img = "<img
      title="\frac{$numerator}{$denominator}"
      src=\"http://latex.codecogs.com/gif.latex?\dpi{50}&amp;
            space;\fn_phv&amp;space;\frac{$numerator}{$denominator}\"
      alt=''
      />";

(等)

除MariaDB外,没有REGEXP_REPLACE

答案 1 :(得分:0)

在MySQL中,正则表达式仅支持查找“匹配”,即REGEXP运算符,它返回一个布尔值。不支持使用正则表达式返回另一个值。

参考:12.5.2 Regular Expressions https://dev.mysql.com/doc/refman/5.6/en/regexp.html

你说你“需要使用正则表达式”来进行字符串操作。这意味着您必须将数据库中的列值提取到客户端应用程序中,并在客户端应用程序中执行字符串操作。 (从客户端发出UPDATE语句,为列分配新值,替换现有值。)

修改

如果您绝对 在SQL语句中执行此操作,那么一个选项是创建可用于执行字符串操作的用户定义函数。

https://dev.mysql.com/doc/refman/5.6/en/adding-functions.html

有些人可能已经编写了一个类似于你需要的东西。我不想给人一种用户定义的功能是银弹的印象;我提到它是因为它是一种选择。