我在表格“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”的批量值吗?
谢谢!
答案 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/