如何用MariaDB查询为小写字母/数字、句号与大写字母间添加空格
批量修正产品描述中的标点空格问题
我花了一周处理包含103,927个产品的数据馈送文件,解决了数千处语法错误,现在卡在一个需求上:需要在小写字母/数字、句号与大写字母之间添加空格。
核心限制:描述里包含小数数值和HTTP地址,不能直接将所有句号替换为「句号+空格」;且必须替换每条记录里的所有符合规则的实例,但我编写的代码仅能修改第一个匹配项。
我有MySQL编程基础,但对正则表达式不太熟悉,试过以下代码(正则已在regex101和Notepad++中验证):
第一次尝试的代码
SELECT REPLACE(`desc`, REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.[A-Z]'), REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.\s[A-Z]')) FROM `build_datafeed` WHERE `desc` IS NOT NULL
结果:仅修改首个无空格的句号实例,例如将use.This改为ushis。
第二次尝试的代码
SELECT REPLACE(`desc`, REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.[A-Z]'), CONCAT(REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.'), REGEXP_SUBSTR(`desc`, '\s[A-Z]'))) FROM `build_datafeed` WHERE `desc` IS NOT NULL
结果:仍然仅修改首个实例,例如将use.This改为use. uhis,未达到预期效果。
我试过REPLACE、SUBSTR、REGEXP_REPLACE、REGEXP_SUBSTR的多种组合,也用PHP处理过,但速度过慢。寻求可行的解决办法。
环境信息
- Server Host: localhost (127.0.0.1)
- Server OS: Windows NT DESKTOP-4B8U62U 10.0 build 19045 (Windows 10) AMD64
- Server Date: 06/07/2024 11:39:28
- Server Up Time: Unsupported
- HTTP Server: Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/8.0.23
- PHP Version: 8.0.23 (Zend: 4.0.23)
- PHP File Uploads: On
- Upload Max Size: 512M
- PHP Memory Limit: -1
- POST Max Size: 1024M
- Database Engine: MySQL 10.4.25-MariaDB
- Database Host: localhost (127.0.0.1)
- Database Date: 06/07/2024 11:39:28
- Database Data Size: 361,500 kB
- Database Index Size: 50,015 kB
- MySQL Slow Query Log Status: Off
- MySQL Mode: NO_ZERO_IN_DATE, NO_ZERO_DATE, NO_ENGINE_SUBSTITUTION
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

