替换字段中的批量值 - MySql

时间:2015-03-08 15:08:34

标签: mysql

我在表格“wp_postmeta”中的字段“meta_value”中保存了一些html代码,如下所示:<img src="...." height="X" width="Y" > 我想用“100%”替换所有字段中的X和Y,但这可能在MySql中吗? X和Y在每条记录中都是不同的值,如X = 200,Y = 350 - 第一条记录,X = 325,第二条记录中Y = 200等等。

我看到了Mysql search and replace some text in a field问题,但是我可以使用类似的解决方案来更新height =“X”和width =“Y”的批量值吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

这很复杂,让我们从示例开始,我们如何使用mysql。

mysql> create table test (post text);
Query OK, 0 rows affected (0.12 sec)

mysql> insert into test values ('<img src="...." height="100" width="200">'),('<img src="...." height="300" width="400" >');
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test ;
+--------------------------------------------+
| post                                       |
+--------------------------------------------+
| <img src="...." height="100" width="200">  |
| <img src="...." height="300" width="400" > |
+--------------------------------------------+

现在让我们使用一些函数来替换

select 
replace
(
  post,
  concat(
    'height="',
    substring_index(
     substring_index(
      post,'height="',-1
     ),
     '"',1
    ),
    '"'
   ),
   concat(
    concat(
     'height="',substring_index(
       substring_index(
        post,'height="',-1
       ),
      '"',1
     ),
    '%"'
   )
  )
) as height from test;

+---------------------------------------------+
| height                                      |
+---------------------------------------------+
| <img src="...." height="100%" width="200">  |
| <img src="...." height="300%" width="400" > |
+---------------------------------------------+
2 rows in set (0.00 sec)

同样,宽度可以替换为

select 
replace
(
  post,
  concat(
    'width="',
    substring_index(
     substring_index(
      post,'width="',-1
     ),
     '"',1
    ),
    '"'
   ),
   concat(
    concat(
     'width="',substring_index(
       substring_index(
        post,'width="',-1
       ),
      '"',1
     ),
    '%"'
   )
  )
) as width from test;

+---------------------------------------------+
| width                                       |
+---------------------------------------------+
| <img src="...." height="100" width="200%">  |
| <img src="...." height="300" width="400%" > |
+---------------------------------------------+
2 rows in set (0.01 sec)

最后在更新命令中将它们用作

update test set
text =  
replace
(
  post,
  concat(
    'height="',
    substring_index(
     substring_index(
      post,'height="',-1
     ),
     '"',1
    ),
    '"'
   ),
   concat(
    concat(
     'height="',substring_index(
       substring_index(
        post,'height="',-1
       ),
      '"',1
     ),
    '%"'
   )
  )
),
text = 
replace
(
  post,
  concat(
    'width="',
    substring_index(
     substring_index(
      post,'width="',-1
     ),
     '"',1
    ),
    '"'
   ),
   concat(
    concat(
     'width="',substring_index(
       substring_index(
        post,'width="',-1
       ),
      '"',1
     ),
    '%"'
   )
  )
) ;


mysql> select * from test ;
+----------------------------------------------+
| post                                         |
+----------------------------------------------+
| <img src="...." height="100%" width="200%">  |
| <img src="...." height="300%" width="400%" > |
+----------------------------------------------+
2 rows in set (0.00 sec)

答案 1 :(得分:0)

默认情况下,mysql没有类似MariaDB的功能:

REGEXP_REPLACE(subject, pattern, replace)

您可以创建一个功能,如本博客所示:https://techras.wordpress.com/2011/06/02/regex-replace-for-mysql/