如何统计 MySQL/正则表达式替换器中的单词数?
如何在 MySQL 查询中具有与 Regex.Replace 函数相同的行为(例如在 .NET/C# 中)?
我需要它,因为和很多人一样,我想计算一个字段中的单词数。但是,我对以下答案不满意(在该网站上多次给出):
SELECT LENGTH(name) - LENGTH(REPLACE(name, ' ', '') +1 FROM table
因为当两个单词之间有超过一个空格时,它不会给出好的结果。
顺便说一句,我认为 Regex.Replace 函数可能很有趣,所以欢迎所有好主意!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
REGEXP_REPLACE 可用作 MySQL 用户定义函数。
字数统计:如果您可以控制进入数据库的数据,则可以在插入之前删除双空格。此外,如果您必须经常访问字数统计,您可以在代码中计算一次并将计数存储在数据库中。
There's REGEXP_REPLACE available as MySQL user-defined functions.
Word counting: If you can control the data going into the database, you can remove double whitespace before insert. Also if you have to access the word count often, you can compute it once in your code and store the count in the database.
更新:现已添加一个单独的MySQL 8.0+ 的答案,应优先使用。 (保留此答案,以防仅限于使用早期版本。)
几乎与 这个问题,但这个答案将解决基于来自 这篇博文。
演示
Rextester 在线演示
对于示例文本,给出的计数为 61 -与我尝试过的所有在线单词计数器相同(例如 https://wordcounter.net/)。
SQL(为简洁起见,不包括函数代码):
UPDATE: Have now added a separate answer for MySQL 8.0+, which should be used in preference. (Retained this answer in case of being constrainted to using an earlier version.)
Almost a duplicate of this question but this answer will address the use case of counting words based on the advanced version of the custom regular expression replacer from this blog post.
Demo
Rextester online demo
For the sample text, this gives a count of 61 - the same as all online word counters I've tried (e.g. https://wordcounter.net/).
SQL (excluding function code for brevity):
MySQL 8.0 现在提供了一个不错的 REGEXP_REPLACE 函数,这使得这变得更简单:
SQL
Demo
DB-Fiddle 在线演示
MySQL 8.0 now provides a decent REGEXP_REPLACE function, which makes this much simpler:
SQL
Demo
DB-Fiddle online demo
答案是否定的,在 MySQL 中不能有相同的行为。
但我建议您早先查看这个问题链接到 UDF 的主题,据称该 UDF 启用了部分此功能。
The answer is no you cannot have the same behaviour in MySQL.
But i recommend you checkout this earlier question on the subject which links to a UDF that supposedly enables some of this functionality.