如何使用 MYSQL 替换数值(版本)?

How can i replace numerical value (version) using MYSQL?

我正在构建文档版本控制 Intranet 网站。我有大约 1700 本书名,其中包括像

这样的版本

如何从所有文档标题名称中删除文档版本 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() 来删除它。