我正在尝试决定在我的新 MySQL 实例上将 min_word_length 设置为 2 还是 3,所以我想如果我计算要索引的列中 2 个字母单词的数量,它将给出正确答案的指示。
所以,问题是,是否可以使用 SQL 查询来计算列中的两个字母单词的数量?
我正在尝试决定在我的新 MySQL 实例上将 min_word_length 设置为 2 还是 3,所以我想如果我计算要索引的列中 2 个字母单词的数量,它将给出正确答案的指示。
所以,问题是,是否可以使用 SQL 查询来计算列中的两个字母单词的数量?
没有测试,但你可以试试
SELECT SUM(
CASE WHEN yourColumn REGEXP '[[:<:]][a-zA-Z]{2}[[:>:]]'
THEN 1
ELSE 0 END
) AS matches
FROM ...
虽然我认为,它可能只计算一个 2 个字符的单词连续出现,而不是连续出现多少次。
更新:经过测试,它像我想的那样工作,所以请忽略这个答案。
LEN() 函数返回文本字段中值的长度。
SELECT LEN(column_name) FROM table_name
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(column_name) FROM table_name
所以你的查询应该是这样的:
SELECT COUNT(column_name) FROM table_name
WHERE LEN(column_name)=2
更新:
好的,对不起,我想我误解了你。如果你想要它,恐怕没有内置函数可以做你想做的事情。所以你必须自己做一个功能。像这样的东西应该工作:
CREATE FUNCTION [dbo].[WordCount] ( @InputString VARCHAR(4000) )
RETURNS INT
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @WordCount INT
DECLARE @CharCount INT
SET @Index = 1
SET @WordCount = 0
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
SET @CharCount = @CharCount + 1
SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
ELSE SUBSTRING(@InputString, @Index - 1, 1)
END
IF @PrevChar = ' '
SET @CharCount = 1
END
IF @Char = ' ' AND @CharCount < 3 AND @CharCount > 1
SET @WordCount = @WordCount + 1
SET @Index = @Index + 1
END
RETURN @WordCount
END
现在我还没有测试它,所以你必须自己测试它,但它应该可以工作。它将返回所选字符串中的所有 2 个字母单词。要获得 3 个字母的单词,只需更改
IF @Char = ' ' AND @CharCount < 4 AND @CharCount > 2
我希望这有帮助。