更新:现在已经为 MySQL 8.0+ 添加了一个单独的答案,应该优先使用。(如果被限制使用早期版本,请保留此答案。)
几乎是这个问题的一个副本,但这个答案将解决基于此博客文章中自定义正则表达式替换器的高级版本计算单词的用例。
演示
Rextester 在线演示
对于示例文本,这给出了 61 的计数 - 与我尝试过的所有在线单词计数器相同(例如https://wordcounter.net/)。
SQL (为简洁起见,不包括函数代码):
SELECT txt,
-- Count the number of gaps between words
CHAR_LENGTH(txt) -
CHAR_LENGTH(reg_replace(txt,
'[[:space:]]+', -- Look for a chunk of whitespace
'^.', -- Replace the first character from the chunk
'', -- Replace with nothing (i.e. remove the character)
TRUE, -- Greedy matching
1, -- Minimum match length
0, -- No maximum match length
1, -- Minimum sub-match length
0 -- No maximum sub-match length
))
+ 1 -- The word count is 1 more than the number of gaps between words
- IF (txt REGEXP '^[[:space:]]', 1, 0) -- Exclude whitespace at the start from count
- IF (txt REGEXP '[[:space:]]$', 1, 0) -- Exclude whitespace at the end from count
AS `word count`
FROM tbl;