如何使用 MYSQL 替换数值(版本)?
How can i replace numerical value (version) using MYSQL?
我正在构建文档版本控制 Intranet 网站。我有大约 1700 本书名,其中包括像
这样的版本
- 傻瓜书 1.2
- 试卷HTML5Class3.5.7学生
- 学习Amazon S3 Deployment 1.3.4.3 著作
如何从所有文档标题名称中删除文档版本 x.x.x 或 x.x。
因为我想在首页上发布所有没有版本名称的标题列表。
我在 MYSQL 中尝试了 REPLACE 函数替换点,但它也替换了 S3 中的 3 和 HTML5 中的 5。
update book_title_all set title=REGEXP_REPLACE(title,'[0-9]','')
update book_title_all set title=REPLACE(title,'.','')
我只想替换 x.x.x / x.x 格式的数字字符串。
如果你是运行 MySQL 8+,那么REGEXP_REPLACE
函数在这里就派上用场了:
UPDATE book_title_all
SET title = TRIM(REGEXP_REPLACE(title, '\s*[0-9]+(\.[0-9]+)+\s*', ' '))
WHERE title REGEXP '[0-9]+\.[0-9]+';
这里的想法是用单个 space 替换每个版本字符串 1.2.3.4
,以及围绕它的可选白色 space。这样可以在替换后保持标题的格式干净。请注意,这会创建一个边缘案例,其中版本字符串出现在标题的最开头或结尾。在这种情况下,我们的替换将留下额外的 space。需要调用 TRIM()
来删除它。
我正在构建文档版本控制 Intranet 网站。我有大约 1700 本书名,其中包括像
这样的版本- 傻瓜书 1.2
- 试卷HTML5Class3.5.7学生
- 学习Amazon S3 Deployment 1.3.4.3 著作
如何从所有文档标题名称中删除文档版本 x.x.x 或 x.x。
因为我想在首页上发布所有没有版本名称的标题列表。
我在 MYSQL 中尝试了 REPLACE 函数替换点,但它也替换了 S3 中的 3 和 HTML5 中的 5。
update book_title_all set title=REGEXP_REPLACE(title,'[0-9]','')
update book_title_all set title=REPLACE(title,'.','')
我只想替换 x.x.x / x.x 格式的数字字符串。
如果你是运行 MySQL 8+,那么REGEXP_REPLACE
函数在这里就派上用场了:
UPDATE book_title_all
SET title = TRIM(REGEXP_REPLACE(title, '\s*[0-9]+(\.[0-9]+)+\s*', ' '))
WHERE title REGEXP '[0-9]+\.[0-9]+';
这里的想法是用单个 space 替换每个版本字符串 1.2.3.4
,以及围绕它的可选白色 space。这样可以在替换后保持标题的格式干净。请注意,这会创建一个边缘案例,其中版本字符串出现在标题的最开头或结尾。在这种情况下,我们的替换将留下额外的 space。需要调用 TRIM()
来删除它。