我正在尝试在MySql中运行查询,将包含斜杠(/)的params字符串(文本类型)的一部分替换为某些joomla项目菜单。
例如:健身/运动是弦乐的一部分,我需要改为健身&运动
在表中,字符串是由joomla写的,如下所示:
......................
“page_title”:“Vicenza Fitness / Sport”,
......................
首先我尝试选择:
select id,params FROM mytable WHERE params LIKE '%Fitness/Sport%';
然后我尝试直接替换
UPDATE mytable SET params = REPLACE(params,'Fitness/Sport','Fitness & Sport') WHERE alias ='fitness-sport';
但两个查询都返回0结果。
(每个别名有139行包含abc / xyz)
正如@Vladimir所证明的那样,查询通常只能使用斜线和仅为它进行搜索
select id,params FROM mytable WHERE params LIKE '%/%';
查询工作正常,并且工作,也搜索没有斜杠的字符串 (我不能只查询foward-slash,因为它会影响其他params字符串)
我无法弄清楚为什么不工作, 有什么建议吗?
感谢的
答案 0 :(得分:0)
select REPLACE('string abc/xyz', 'abc/xyz','abc & xyz');
+--------------------------------------------------+
| REPLACE('string abc/xyz', 'abc/xyz','abc & xyz') |
+--------------------------------------------------+
| string abc & xyz |
+--------------------------------------------------+
这意味着替换子句可以完美地运行,但是如果你收到0就意味着你没有行机智params LIKE '%abc/xyz%' AND alias ='myalias'
,第一个查询就是这么说的。
这是我的简单示例:
cli [db]> create table simpleTest (id int key, params varchar(50) );
Query OK, 0 rows affected (0.00 sec)
cli [db]> insert into simpleTest values
-> (1, 'params test abc/xyz 1'),
-> (2, 'params test abc/xyz 2'),
-> (3, 'params test abc/xyz 3');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
cli [db]> select * from simpleTest;
+----+-----------------------+
| id | params |
+----+-----------------------+
| 1 | params test abc/xyz 1 |
| 2 | params test abc/xyz 2 |
| 3 | params test abc/xyz 3 |
+----+-----------------------+
3 rows in set (0.00 sec)
cli [db]> update simpleTest set params = replace(params, 'abc/xyz', 'abc & xyz');
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
cli [db]> select * from simpleTest;
+----+-------------------------+
| id | params |
+----+-------------------------+
| 1 | params test abc & xyz 1 |
| 2 | params test abc & xyz 2 |
| 3 | params test abc & xyz 3 |
+----+-------------------------+
3 rows in set (0.00 sec)
它对我有用......
答案 1 :(得分:0)
最终我找出了查询中的错误;
我不是为什么,但似乎foward-slash(/)与反斜杠一起写入表中并成为(/)所以我试图逃避反斜杠并且所有工作都完美。
正确的查询是:
UPDATE mytable SET params = REPLACE(params,'Fitness\\/Sport','Fitness & Sport') WHERE alias ='fitness-sport'
注意要反转的双反斜杠。