ОБНОВЛЕНИЕ: теперь добавлено отдельный ответ для 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;