我在一个表中有一条记录:
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)的查询只适用于少数人,而并非全部
答案 0 :(得分:2)
为什么不只是嵌套两个对REPLACE
的调用:
UPDATE table
SET SKU = REPLACE(REPLACE(SKU, '_ ', '_'), ' _', '_')
WHERE SKU REGEXP ' _|_ ';
请注意,MySQL实际上并不真正支持任何形式的正则表达式替换,因此REPLACE
差不多能做到(尽管我们能够在REGEXP
子句中使用WHERE
)
编辑:
要验证该更新实际上已删除/修复了所有不良数据,您可以尝试使用以下选择查询:
SELECT *
FROM table
WHERE SKU REGEXP ' _|_ ';
请注意,此查询应返回 no 结果,因为如果返回,则意味着更新逻辑不完全正确。