2

我正在尝试决定在我的新 MySQL 实例上将 min_word_length 设置为 2 还是 3,所以我想如果我计算要索引的列中 2 个字母单词的数量,它将给出正确答案的指示。

所以,问题是,是否可以使用 SQL 查询来计算列中的两个字母单词的数量?

4

2 回答 2

0

没有测试,但你可以试试

SELECT SUM(
CASE WHEN yourColumn REGEXP '[[:<:]][a-zA-Z]{2}[[:>:]]'
THEN 1 
ELSE 0 END
) AS matches 
FROM ...

虽然我认为,它可能只计算一个 2 个字符的单词连续出现,而不是连续出现多少次。

更新:经过测试,它像我想的那样工作,所以请忽略这个答案。

于 2012-04-05T12:01:33.623 回答
-1

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

我希望这有帮助。

于 2012-04-05T11:37:29.593 回答