我在一个表中有一条记录,如:
aaaa bbbbb_ ccccc_1
或
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:
这里有一个链接,您可以在其中查看所有包含"_"或"_"的记录。我使用的是:
SELECT SKU FROM table WHERE SKU LIKE '%_ %' OR SKU LIKE '% _%'
根据Tim的建议,上面的查询没有列出700+条记录,而是显示530条。因此,Tim的查询对少数有效,但对所有无效
为什么不嵌套两个对REPLACE
:的调用
UPDATE table
SET SKU = REPLACE(REPLACE(SKU, '_ ', '_'), ' _', '_')
WHERE SKU REGEXP ' _|_ ';
请注意,MySQL并不真正支持任何形式的regex替换,因此REPLACE
与它一样好(尽管我们可以在WHERE
子句中使用REGEXP
(。
编辑:
要验证更新实际上已经删除/修复了所有坏数据,您可以尝试使用以下选择查询:
SELECT *
FROM table
WHERE SKU REGEXP ' _|_ ';
请注意,此查询应返回no结果,因为如果返回,则意味着更新逻辑不完全正确。