在字符串

时间:2017-02-15 15:20:24

标签: mysql

我正在尝试在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字符串)

我无法弄清楚为什么不工作,  有什么建议吗?

感谢的

2 个答案:

答案 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'

注意要反转的双反斜杠。