使用REPLACE和LIKE

时间:2018-07-16 13:46:53

标签: php mysql mysqli pdo

我在一个表中有一条记录:

aaaa bbbbb_ ccccc_1

OR

gggg jjjjj_fffff _34

请注意空格和下划线以及下划线和空格。
请注意,字符串和数字格式可能不同。

我想使用单行查询选择和更新数据库中的这些信息。

我到目前为止所做的事情:

$update = " UPDATE table 
               SET SKU = REPLACE((
                        SELECT  SKU 
                        FROM    table 
                        WHERE   SKU LIKE '%\_ %' OR SKU LIKE '% \_%'
                      ),replace('_ ', ' _'),replace('_', '_'))";

已翻译: 更新表SKU =用简单的_

替换选择的情况1(_)或情况2(_)

问题: 该查询失败...为什么?

编辑1:

Here是一个链接,您可以在其中查看其中包含“ _”或“ _”的所有记录。 我正在使用这个:

SELECT SKU FROM table WHERE SKU LIKE '%\_ %' OR SKU LIKE '% \_%'

使用蒂姆的建议,上面的查询没有列出700多个记录,而是显示530。因此,蒂姆(Tim)的查询只适用于少数人,而并非全部

1 个答案:

答案 0 :(得分:2)

为什么不只是嵌套两个对REPLACE的调用:

UPDATE table
SET SKU = REPLACE(REPLACE(SKU, '_ ', '_'), ' _', '_')
WHERE SKU REGEXP ' _|_ ';

请注意,MySQL实际上并不真正支持任何形式的正则表达式替换,因此REPLACE差不多能做到(尽管我们能够在REGEXP子句中使用WHERE

编辑:

验证该更新实际上已删除/修复了所有不良数据,您可以尝试使用以下选择查询:

SELECT *
FROM table
WHERE SKU REGEXP ' _|_ ';

请注意,此查询应返回 no 结果,因为如果返回,则意味着更新逻辑不完全正确。